前言
回顾历史,kotlin-android-extensions插件让我们省去了很多findViewById的代码,直接使用控件id操作控件。不过在Android Studio 4.1及以上IDE新建项目的时候,默认不会引入他了,如果还在使用,会给一个警告:kotlin-android-extensions插件已被废弃,现在推荐使用ViewBinding来进行替代。
更新gradle文件
build.gradle
plugins {
//...
// id 'kotlin-android-extensions' //删除这行
id 'kotlin-parcelize' //添加这行
}
android {
...
buildFeatures {
dataBinding = true
viewBinding = true //添加这行
}
}
更新Activity和Fragment等页面代码
- 删掉kotlinx.android.synthetic相关导入
关键字:kotlinx.android.synthetic
- 为要使用的活动或片段扩充生成的绑定类的实例
这部分,相信有的小伙伴使用DataBindingUtil和泛型做过基类的封装比如这种“BaseActivity<VM : BaseViewModel, DB : ViewDataBinding”,做过的直接跳第三条。
//activity示例
private lateinit var binding: ResultProfileBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//布局为 result_profile.xml
binding = ResultProfileBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
}
//fragment示例
private var _binding: ResultProfileBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = ResultProfileBinding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
- 更改所有视图引用以使用绑定类实例,而不是直接使用控件id
示例
//tv.text = "卢本伟" //删掉这行
binding.tv.text = "卢本伟"