模块之间的Android视图绑定
Posted
技术标签:
【中文标题】模块之间的Android视图绑定【英文标题】:Android view binding between modules 【发布时间】:2020-05-23 16:59:32 【问题描述】:视图绑定在模块之间有效吗?
如何重现:创建 2 个模块 >>> 在 module1 中创建 layout1 并在 module2 中创建 layout2 >>> 在 module1 中创建 Fragment1,其中包含 layout1、layout2 >>> 尝试获取绑定 >>> layout1 将工作,因为它与 Fragment1 在同一个模块中,但 layout2 由于绑定生成错误而无法工作
我的例子:
Authentication 模块依赖于common 模块。
base_button.xml 位于 common 模块中。
login_input_component.xml 在 Authentication 模块中,所以没有问题。
但此错误发生在 loginButton 绑定上。
即使 base_button.xml 在另一个模块中,它也会尝试在身份验证模块中查找 BaseButtonBinding。
所有模块都有:
buildFeatures
dataBinding = true
viewBinding = true
【问题讨论】:
我没有尝试重现您的案例,但我有一个项目,其中在 module2 中使用了来自 module1 的绑定类并且它可以工作。你检查过你的模块 gradle 文件吗? 是的,一切都应该如此。你能告诉我你的灵魂解决方案吗? @Nikron 我也有同样的问题,¿您找到解决方案了吗? @PabloA.Martínez 很遗憾没有 @Nikron 我也试过了,我生成了正确的文件,你能确保你的 IDE 和 Gradle 已经更新并且你的 module1 依赖项中有implementation project(":Module2")
吗?你能分享任何具有相同复制设置的 github 链接吗?
【参考方案1】:
如果我是正确的,你有这种结构
项目 | -- 应用 | -- module1 [包含 layout_one.xml 和 layout_fragment.xml] | -- module2 [包含 layout_two.xml]
layout_fragment.xml
将包括 layout_one.xml
和 layout_two.xml
现在为了完成这项工作,您需要做的就是转到 module1 build.gradle
文件并添加此依赖项
implementation project(":module2")
请注意,您的应用会知道 module1 和 module2 文件,但 module1 和 module2 文件不会知道这两个文件的存在。所以通过指定这个依赖,我们使 module1 依赖于 module2
并确保在每个模块中 viewBinding 已启用
【讨论】:
感谢您的回答,但正如我在示例中所说的那样 module1 == Authentication,module2 == common,并且依赖关系与您的示例相同。 ViewBinding 在所有模块中启用。如果你想通过绑定得到 layout_two 是不可用的。【参考方案2】:我遇到了完全相同的问题。
今天,一周后我再次解决了这个问题,我不得不在 android Studio 中使缓存失效并重新启动,因为ViewBinding
类总是以红色突出显示“无法解决”,但构建和运行是成功的。
我之前做了一个clean build,然后使缓存失效并重新启动。
之后,一切都按相位进行。
我希望这对你的情况也有帮助。
【讨论】:
【参考方案3】:对我来说问题是 Windows 10 限制了 Android Studio 中的下载功能并且不允许它下载。也许您应该完成在 Windows 10 中建立 Android Studio 信任的过程。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于模块之间的Android视图绑定的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio 开启视图绑定 viewBinding
Android Studio 开启视图绑定 viewBinding