【问题标题】:ViewBinding of included library will not generated不会生成包含库的 ViewBinding
【发布时间】:2021-06-02 15:39:09
【问题描述】:

我有点卡在这里:

我们有一个 UI 组件库,我们在项目的各个地方都在使用它。还为那些工作正常的布局生成视图绑定。

当我尝试将主项目中的这些布局包含在另一个布局中时,我卡住了:

<FrameLayout ...>
   <include id="@+id/includedLayoutFromLib" layout="@layout/someLibraryLayout"/>
</FrameLayout>

我已经阅读了有关如何包含布局的信息(我在这里没有使用合并)。

我无法访问包含的视图:

 binding.includedLayoutFromLib.title 

当设置了包含的 ID 时,我希望可以从包含的绑定中访问“标题”。所有视图在包含的视图中也有 ID

这是一个错误还是我在这里错过了什么?

谢谢

【问题讨论】:

  • 是的,这个很有趣。我有类似的情况,我的binding.includedLayoutFromLib 的类型是View,而不是绑定。奇怪的是,includedLayoutFromLib 的绑定存在,但 binding.includedLayoutFromLib 只是没有引用它。

标签: android-viewbinding


【解决方案1】:

我也面临同样的问题,非常非常...,更改 bing.view.findViewById(R.id.test) 可能有效。

【讨论】:

    【解决方案2】:

    我做了快速检查,我认为有类似的情况,将模块与布局分开,将它们包含在其他模块的布局中,一切都很好。如果你有,也许你可以检查 gradle 配置

    android {
       buildFeatures { viewBinding = true } 
    }
    

    在两个模块中设置。 此外,我会开始使用 clean build、gradle sync 甚至 android studio 使缓存无效/重新启动,只是为了排除一些垃圾构建文件作为问题的根源。

    还有一个问题:这个 UI 组件库是预编译的还是您项目中的一个模块。从我看来它也应该可以工作,但在这种情况下可能需要一些额外的配置?

    【讨论】:

    • 你说的是模块,我猜你的意思是 gradle 模块。这工作得很好。我们在内部 maven repo 上有一个 UI 组件库,它只是通过实现“library:name:version”添加的,它忽略了生成绑定。所有展示其工作原理的帖子都不会显示在大型项目中常见的那种场景
    • 哦,我看到了你的情况。好吧,我还没有代码来测试它,但是在您的位置上,我将从尝试 api 而不是 implementation 开始,因为它使您可以更多地访问内部库文件,并且在此特定库中生成绑定(它们可能被视为一些内部的东西)你可能看不到它们,因为你使用了太弱的依赖配置。
    • 哦,这可能至少是一个尝试的选择,会给反馈
    【解决方案3】:

    因为查看绑定对我来说就像你提到的那样,我建议Clean Project然后invalidate caches/restart,然后Rebuild Project强>。你用的是什么版本的android studio?

    【讨论】:

    • 我在 AS 4.2 上并清理了缓存等等。
    • 这将是一个漫长的步骤,但如果没有其他工作,请尝试删除绑定然后再次启用它,您可以共享库 xml。
    猜你喜欢
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多