首页 > 解决方案 > 在android上覆盖布局和数据绑定生成的类

问题描述

我在开发我的应用程序时遇到以下错误:

我正在使用一些“默认”库模块构建多个应用程序。这些库模块都使用数据绑定并包含默认布局和功能。有时我会被要求更改在库模块中找到的东西的 UI,然后我就会遇到麻烦。

让我们想象以下场景:

图书馆A:

应用程序B:

应用程序:

我已经搜索了整个 StackOverflow 和互联网,似乎没有人能够成功地做我想做的事:覆盖使用 dataBinding 的库中的资源文件,以便为使用该库的某些应用程序提供稍微不同的视图。在使用数据绑定之前,一切都很顺利,事实上我必须确保 findViewByIds 没有返回 null ,所以我可以使用新的布局。

标签: androidlayoutbindingoverridingandroid-databinding

解决方案


不知何故,我最终深入挖掘了 DataBinding 类的实现并一一排除了错误。我最终做的是:

应用程序:

  • 我创建了另一个 layout_A.xml 文件,但根标签不再存在,因此它不会给出类强制转换异常;我调整布局文件中需要的内容。

  • LibActivityA 使用 DataBindingUtil.setContentView() 所以资源合并后 R.layout.layout_A 将是来自 AppC 的

  • 在 AppC 的 layout_A.xml 中,我在视图上手动设置了标签:根标签获取标签 =“layout/layout_A_0”,ViewGroup 类型的任何直接子标签 =“绑定_[子编号]”。

手动设置标签似乎可以使最新的 DataBinding 生成的类按预期工作。我很确定这不是这样做的方法,但这是我找到的唯一方法,而无需完全删除数据绑定:(

我很确定这不是我们应该使用 DataBinding 库的方式,所以我在这里开了一张票:https ://issuetracker.google.com/issues/135043330


推荐阅读