kotlinx.android.synthetic.** 坑点
来源:互联网 发布:淘宝设计教程 编辑:程序博客网 时间:2024/06/05 01:09
Kotlin通过添加
apply plugin: 'kotlin-android-extensions'
可以直接使用layout id 名称获取当前view对象,详细使用如下:
//layout<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:background="@color/colorPrimary" android:id="@+id/root_view" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:text="Hello World" android:id="@+id/hello_world" android:text="@string/time_span" style="@style/basicTextStyle" /></FrameLayout>//kotlin 代码package cn.enjoytoday.test//这是重点,需要手动添加或者android studio提示添加import kotlinx.android.synthetic.main.activity_drag_test.*class DragTestActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { setContentView(R.layout.activity_drag_test) hello_world.text = "完美的写法" } }
就目前为止都是完美的用法,代码简洁的不要不要的。就网上目前情况看,一般的找不到view无法直接通过id代替对象操作使用大多是由于未能成功导入kotlin-android-extensions插件或者直接没有添加,添加方式如下:
apply plugin: 'com.android.application'//如下两个插件缺一个不可,kotlin-android为基本支持android 开发插件,kotlin-android-extensions就是省去我们频繁找id的插件了apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions'buildscript { ext.kotlin_version = '1.1.4-3' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" }}dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"}
但,这不是终点。真正的槽点在于,即使你以上配置完全正确还是有可能出现找不到的错误,这个错误的产生源于三方的aar导入,存在你使用的layout是导入的三方的aar中的。这里需要注意的是kotlin-android-extensions插件给我们自动寻址的id都是基于我们当前apk资源下的,即是:Resource指向的包。也就是java中比较常见的如下:
import cn.enjoytoday.test.R.*; //当前应用资源,kotlin-android-extensions寻址对象 import cn.enjoytoday.external.R.*; //引入的三方包的资源
这个时候,我们只能乖乖自己找id了,如下:
package cn.enjoytoday.testimport kotlinx.android.synthetic.main.activity_main.*import kotlinx.android.synthetic.main.activity_list_item.* //android资源class DragTestActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) hello_world.text = "完美的写法" val view= View.inflate(this,android.R.layout.activity_list_item,null) layout.addView(view) view.text1.text ="text" }}//会报错如下:DragTestActivity.kt: (7, 39): Unresolved reference: activity_list_itemDragTestActivity.kt: (19, 14): Unresolved reference: text1//修改后import kotlinx.android.synthetic.main.activity_main.*class DragTestActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) hello_world.text = "完美的写法" val view= View.inflate(this,android.R.layout.activity_list_item,null) layout.addView(view) val text1=view.findViewById(android.R.id.text1) as TextView text1.text ="Test" }}
图就不贴了,一般来说这种方法会比较少,但不是不可能,尤其三方依赖越来越多。希望以后kotlin-android-extensions可以更加智能吧.
Enjoytoday,EnjoyCoding
阅读全文
0 0
- kotlinx.android.synthetic.** 坑点
- 找不到 kotlinx.android.synthetic***
- Android Studio 中Kotlinx开发
- android studio运行Kotilin程序出现Error:(5, 8) Unresolved reference: kotlinx 解决办法
- Synthetic Texture
- 黑马程序员——OC核心语法点语法,成员变量,@property和@synthetic,构造方法
- 黑马程序员——OC字符串,点语法,成员变量,@property和@synthetic,构造方法
- Unresolved reference: kotlinx解决方案
- kotlin Unresolved reference: kotlinx
- Kotlin中找不到kotlinx解决方法
- 关于synthetic标记
- Java中的synthetic
- synthetic Java合成类型
- android 开发坑点记录
- what is a synthetic field and method
- eCos GUI for Synthetic 的研究
- 产生synthetic DataSet的数据集
- 朝花夕拾——Java的synthetic修饰词
- 什么是P问题、NP问题和NPC问题
- Leetcode 330. Patching Array
- J2EE基础
- HashMap和Hashtable的区别
- SpringMVC+Spring+mybatis+redis项目从零开始--Springmvc配置实现
- kotlinx.android.synthetic.** 坑点
- Docker私有仓库搭建
- 二叉树
- 设置cmd命令提示符窗口属性
- 从此踏入AI圈
- TabNavigator自定义Tab
- mysql 与 engine 之间桥梁
- html5 canvas动画教程
- jsp太大编译不了,JSP页面过大。访问报错,解决方案。