从 Kotlin synthetic 迁移到 View Binding
251 字
1 分钟
从 Kotlin synthetic 迁移到 View Binding
现象
升级 Kotlin 或 Android Gradle Plugin 后,布局控件 ID 不能再作为 Kotlin 属性直接访问。旧文章常建议重新添加 kotlin-android-extensions,但该插件已经弃用,不应恢复。
快速结论
启用 View Binding。它会为每个布局生成类型安全的绑定类,不需要运行时查找 View,也不会引入 synthetic 缓存带来的作用域问题。
启用 View Binding
在应用模块的 build.gradle.kts 中添加:
android {
buildFeatures {
viewBinding = true
}
}
Groovy DSL 对应写法:
android {
buildFeatures {
viewBinding true
}
}
在 Activity 中使用
假设布局名为 activity_main.xml,生成类为 ActivityMainBinding:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.sendButton.setOnClickListener {
binding.statusText.text = "已发送"
}
}
}
Fragment 中绑定对象只在 onCreateView() 到 onDestroyView() 之间有效,必须在销毁视图时清空,避免持有失效 View。
验证
- 删除所有 synthetic import。
- 同步 Gradle 并重新构建。
- 搜索项目,确认不存在
kotlin-android-extensions和kotlinx.android.synthetic。
参考
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
从 Kotlin synthetic 迁移到 View Binding
https://blog.mintalix.com/posts/study-kotlin/相关文章智能推荐
1
Kotlin 速查:类名、可空类型与视图引用
android-development整理 Kotlin 中获取运行时类名、声明可空类型、安全转换,以及在 Android 中引用 View 的推荐写法。
2
排查 Android 深色主题下的标题栏冲突
android-development说明 windowActionBar 与 windowNoTitle 的真实作用,并给出在深色主题中排查重复标题栏和主题继承问题的方法。
3
Kotlin 速查:闭区间、半开区间与 JSON 根节点
android-development比较 Kotlin 的闭区间与半开区间写法,并说明 JSON 是否保留根节点包装取决于目标数据模型。
4
使用 Activity Result API 获取页面返回结果
android-development用 AndroidX Activity Result API 替代 startActivityForResult,完成结果注册、页面启动、数据返回与生命周期验证。
5
在旧版 Android 界面中使用 ExpandableListView
android-development在不依赖已弃用 ExpandableListActivity 的前提下,用 ExpandableListView 和 BaseExpandableListAdapter 实现两级列表。
随机文章随机推荐


