【问题标题】:Android databinding using in different modules在不同模块中使用的 Android 数据绑定
【发布时间】:2016-09-29 01:44:43
【问题描述】:

现在我有三个模块,模块A,B,C.模块A编译模块B,模块B编译模块C。模块C中有一个布局(layout_c.xml)。然后我在模块A中使用layout_c.xml布局(layout_a.xml)。

  1. 有 layout_c.xml `

    </variable>
    
    <variable
        name="handler"
        type="xxxxxx">
    
    </variable>
    

    <RelativeLayout
        ......
    </RelativeLayout>
    

    `

  2. 有 layout_a.xml

    <include android:id="@+id/layout_c" layout="@layout/layout_c"/>

  3. 问题:IDE认为bindingA.layoutC返回的是视图而不是数据绑定。模块C有BR类和所有数据绑定类。但是模块A没有。那么,我该怎么办?

    LayoutABinding bindingA = DataBindingUtil.setContentView(this,R.layout.layout_a); newTitleBarViewModel.setDataBinding(bindingA.layoutC);

【问题讨论】:

  • 嗯,编译应该可以了。您是否尝试编译并查看生成的 LayoutABinding 类有什么?我想知道这是否是工作室错误。此外,如果是这样,您能否在 b.android.com 上提交一个带有示例项目的错误。谢谢。
  • 否,未生成 LayoutABinding 类。只有 C 模块有 LayoutCBinding 类。我认为,没有生成LayoutABinding的原因是IDE编译失败。所以它没有生成。你认为是吗?
  • 我已经创建了一个示例项目,但它也有这个问题。所以我会向他们提交一个错误并等待回复。
  • 你能在这里添加一个错误链接吗?

标签: android layout data-binding module include


【解决方案1】:

为了让数据绑定能够跨多个模块工作——在我的例子中——我必须确保每个 Android Studio 模块(库、手机/平板电脑等)都在其对应的build.gradle 中启用了数据绑定(不仅仅是库 .gradle 文件,因为这还不够)

像这样:

android {
        ...

    defaultConfig {
        ...
    }
    buildTypes {
        ...
    }

    // Looks like this needs to be set in the app module that uses the lib
    // The lib needs it for the layout binding code there
    dataBinding {
        enabled = true
    }

}

应用解决方案的项目结构:

  1. 有一个库模块,以及多个“应用程序模块” (又名,可以运行用于手机或平板电脑的 Android Studio 模块) 在同一项目中使用该库中的活动/布局

  2. 库项目在 /res/layout 下有依赖数据绑定的 .xml,如下所示:

    <TextView
        android:id="@+id/display_name_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="@={user.displayName}"
        android:textSize="20sp"/>
    

解决这个问题有点棘手。特别是在我有多个模块的情况下。在我将这个解决方案应用于我正在使用的主模块之后,我仍然继续遇到构建错误。最后,我注意到在所有错误输出中还有 1 个其他模块 - 我没有使用过 - 也将库作为依赖项,但缺少 build.gradle 中的数据绑定启用。当最终确定并解决该问题时,构建工作正常。 我很高兴发现这一点,因为当您可以跨多个模块重用具有数据绑定的布局时,它会让事情变得更好

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 2018-03-08
    • 2021-09-18
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    相关资源
    最近更新 更多