模块之间的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.xmlAuthentication 模块中,所以没有问题。

但此错误发生在 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.xmllayout_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 ViewBinding使用详解

Android Studio 开启视图绑定 viewBinding

Android Studio 开启视图绑定 viewBinding

Android View Binding的使用

一起Talk Android吧(第三百八十三回:视图绑定-ViewBinding)

Android DataBinding笔记