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.test

import 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_item
DragTestActivity.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

最新文章

  1. CSS3:backgroud-size和background-origin的使用方法
  2. 【开源】OSharp框架解说系列(1):总体设计及系列导航
  3. PHP页面跳转(PHP笔记)
  4. ZZ : Ubuntu:永久修改MAC地址
  5. Mecanim的Retargeting和BodyMask
  6. 在Spring4中使用通用Mapper
  7. C# String与string的区别
  8. mysql和oracle的一个汉字占几个字符
  9. HDU-4662 MU Puzzle 水题
  10. android大概是通过logcat拦截Log
  11. Tomcat和JDK的内存配置
  12. 轻量级网络库libevent概况
  13. 【tmos】spring data jpa 创建方法名进行简单查询
  14. python第五十三课——time模块
  15. PAT 1018 锤子剪刀布(20)
  16. C#编程(七十四)----------释放非托管资源
  17. js 获取地址栏最后一个文件名称
  18. 社交类APP原型模板分享——微信
  19. php5 Array 数组函数
  20. 欢迎来怼--第二十九次Scrum会议

热门文章

  1. 一文解读Docker (转)
  2. 深入了解angularjs中的$digest与$apply方法,从区别聊到使用优化
  3. Python——高阶函数概念(Higher-order function)
  4. C# List与Dictionary相互转换与高效查找
  5. js中cookie设置、获取与清除
  6. SLES 12: Database Startup Error with ORA-27300 ORA-27301 ORA-27303 While Starting using Srvctl (Doc ID 2340986.1)
  7. [PHP] 接口增加recaptcha行为验证
  8. CodeForces - 1265D(贪心+暴力)
  9. json解决ajax跨域的原理
  10. php isset()和 in_array()