引用UI组件库布局后ViewBinding无法访问include内控件问题求助
这不属于ViewBinding的已知BUG,是跨模块引用布局时的绑定类默认解析逻辑导致的,可按照以下步骤排查解决:
- 先确认组件库模块的
build.gradle配置中没有忽略指定布局的绑定类生成规则,检查是否存在类似如下的过滤配置,如果有需要删除对应规则:viewBinding { // 该配置会禁止生成对应布局的绑定类,需移除 ignore.add("someLibraryLayout.xml") } - 跨模块引用include布局时,主布局的绑定类不会自动解析子布局的内部控件,你当前拿到的
binding.includedLayoutFromLib默认是View类型,需要显式绑定子布局对应的绑定类后才可访问内部控件,示例代码如下:// 先获取include标签引入的布局根View val includeLayoutRoot = binding.includedLayoutFromLib // 用组件库对应布局的绑定类绑定根View val libLayoutBinding = SomeLibraryLayoutBinding.bind(includeLayoutRoot) // 绑定完成后即可正常访问内部所有控件 libLayoutBinding.title.text = "自定义文案" - 如果组件库是以aar形式引入主项目,需要确认组件库的混淆规则中没有对ViewBinding绑定类做混淆删除,避免运行时无法找到绑定类。
- 所有配置调整完成后清理构建缓存重新编译即可,对应清理命令:
# Mac/Linux环境 ./gradlew clean assembleDebug # Windows环境 gradlew.bat clean assembleDebug
内容的提问来源于stack exchange,提问作者Kitesurfer
相关产品推荐
相关产品推荐

