Android实现View Binding时视图引用与绑定类未找到问题
View Binding两类报错解决方案
报错1原因:加tools:viewBindingIgnore="true"找不到绑定类
tools:viewBindingIgnore="true"的作用就是显式告知构建工具不要为当前布局生成View Binding绑定类,属于预期行为,要使用View Binding必须先移除该属性。
报错2原因:移除属性后找不到视图ID
有两个核心问题导致该报错:
- 布局中使用了XML不支持的
//格式注释:XML合法注释格式为<!-- 注释内容 -->,你代码中多处//Layout for Release Date这类非法注释会打断View Binding对布局的解析,导致绑定类控件属性生成不完整 - Kotlin代码中使用了错误的控件属性名:View Binding会自动把布局中下划线命名的ID转换为小驼峰格式的属性,比如
progress_bar对应的属性名为progressBar,text_error对应textError,你直接用下划线命名访问自然找不到属性
修复步骤
- 先删除布局根节点的
tools:viewBindingIgnore="true"属性 - 替换布局中所有
//开头的非法注释为XML标准注释,比如:
把//Layout for Release Date修改为<!-- Layout for Release Date -->
顺带可以修正营收模块的文案错误:把android:text="Budget: "改成android:text="Revenue: " - 修正Kotlin代码中的控件属性名,所有下划线写法改为小驼峰,示例:
其余所有控件属性都按照这个规则修改即可// 原错误写法 binding.progress_bar.setVisibility(if (it == NetworkState.LOADING) View.VISIBLE else View.GONE) binding.text_error.setVisibility( if(it == NetworkState.ERROR) View.VISIBLE else View.GONE) binding.movie_title.setText(it.title) // 修正后写法 binding.progressBar.visibility = if (it == NetworkState.LOADING) View.VISIBLE else View.GONE binding.textError.visibility = if(it == NetworkState.ERROR) View.VISIBLE else View.GONE binding.movieTitle.text = it.title - 确认模块级
build.gradle中已经开启View Binding配置:android { // 其他常规配置 buildFeatures { viewBinding true } } - 执行Android Studio顶部菜单栏「Build → Clean Project」→「Rebuild Project」,或者执行「File → Invalidate Caches / Restart」清除缓存重启IDE,确保绑定类重新正确生成即可。
内容的提问来源于stack exchange,提问作者oyeraghib
相关产品推荐
相关产品推荐

