Unresolved reference,kotlin不能直接引用xml中id

今天使用Kotlin直接引用view中的id的时候发现引用不了?如图
【Android,ketlin】Unresolved reference,kotlin不能直接引用xml中id_android

  • 嗯?难道又要回到findviewbyId?不对劲



解决方案

找到build gradle,在plugins中加入如下代码
【Android,ketlin】Unresolved reference,kotlin不能直接引用xml中id_kotlin_02

id 'kotlin-android-extensions'

或者,你也可以

apply plugin 'kotlin-android-extensions'

  • 当然你也可以根据官方的建议…
    【Android,ketlin】Unresolved reference,kotlin不能直接引用xml中id_android_03


使用新的视图绑定工具!

  • 基于模块化开发的思想,如果你想启用某个moudle的viewBing,你就可以在当前moudle的build.gradle下加入如下代码:
plugins {
...
id 'kotlin-parcelize'
...
}

android {
...
viewBinding {
enabled = true //已过时,之前的写法
}
...
}

【Android,ketlin】Unresolved reference,kotlin不能直接引用xml中id_kotlin_04

plugins {
...
id 'kotlin-parcelize'
...
}

android {
...
buildFeatures {
viewBinding true//最新的写法
}
...
}
  • 如果在使用中开不想为某个布局文件生成binding类,则可以使用如下属性添加到布局的根标签中,如下图:
    【Android,ketlin】Unresolved reference,kotlin不能直接引用xml中id_xml_05
tools:viewBindingIgnore="true"
  • 当moudle开启视图绑定功能后,viewBinding会为每一个布局生成对应的绑定类.每一个绑定类生成对根视图和定义了ID的所有视图的引用.

用法
​​​比如,之前爆红的语句,在kotlin-android-extensions的天下时​

recyclerView.layoutManager = layoutManager

​那么我现在要这么写​

val binding=FragmentPlaceBinding.inflate(layoutInflater)
binding.recyclerView.layoutManager=layoutManager

当然我这是Fragment,在Activity中,你还要加上…

setContentView(activityMainBinding.getRoot());