MVVM架构安卓开发中无需初始化控件即可调用方法,Fragment中失效如何解决
你看到的无需手动初始化控件的写法,依赖的是Kotlin Android Extensions提供的 Kotlin Synthetics 功能。
实现原理
- 只要在模块级
build.gradle中引入kotlin-android-extensions插件,该工具会自动扫描当前页面绑定的布局文件,生成和布局内控件ID同名的全局引用,开发者无需额外编写findViewById代码即可直接调用对应控件。 - 代码中的
button_add_quote、textView_quotes、editText_quote等变量,均为插件根据布局对应ID自动生成的引用。
Fragment中无法生效的常见原因
- 首先确认模块已经启用
kotlin-android-extensions插件,未引入插件的情况下无法识别自动生成的控件引用。 - Fragment存在视图生命周期限制:不可在
onCreateView方法中直接调用Synthetics生成的控件引用,需等onViewCreated执行完成、Fragment根视图加载完毕后再调用,否则会出现找不到控件的问题。 - 确认Fragment绑定的布局文件中,确实存在对应ID的控件,且ID名称和代码中调用的名称完全一致。
补充说明
Kotlin Synthetics目前已被Google官方废弃,存在类型安全、空安全缺陷,官方更推荐使用View Binding实现免findViewById的功能,兼容性和安全性更有保障。
内容的提问来源于stack exchange,提问作者jens.svensson
相关产品推荐
相关产品推荐

