我的项目中有多个模块,让我们说模块应用程序和模块A充当模块应用程序的库。我使用数据绑定并通过添加
工作正常 dataBinding {
enabled = true
}
在每个模块build.gradle中。
当我使用标签包含模块A的布局时出现问题。当我试图访问包含布局的数据绑定时,它返回View对象而不是ViewDataBinding
但是,当我试图继续访问包含布局中的id时,即使IDE显示错误,编译也能正常工作。我尝试过重建项目,使缓存无效等等。
我确信已经遵循规则如何实现DataBinding。这是模块应用程序上的布局:
<layout xmlns:android="http://schemas.android.com/apk/res/android>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/light_gray"
android:orientation="vertical">
<include layout="@layout/included_layout" id="@+id/contact"/>
</LinearLayout>
</layout>
模块A上的布局:
<layout xmlns:android="http://schemas.android.com/apk/res/android>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tv_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
</layout>
答案 0 :(得分:0)
很可能是构建订单问题。您可能需要确保在父模块尝试访问它的内容之前构建模块A.
您在绑定中看到的是您指定联系的ID。这很好,因为它找到了您尝试访问的布局。接下来,它将查找联系人的绑定文件。应该是基于您的命名约定的IncludedLayoutBinding。该文件将嵌套的textViews作为tv_text。
现在,如果您没有看到tv_text,那是因为从未为子模块创建IncludedLayoutBinding。
您确定您的子模块已正确启用数据绑定,并确定在您尝试访问它的值之前已经构建了它。
您可以检查childModule / build / source / dataBinding文件夹,以确保您看到创建的layoutBinding类。我猜它现在不存在。