【问题标题】:How to reuse the same data binding class Android?Android 如何复用同一个数据绑定类?
【发布时间】:2020-01-14 12:59:14
【问题描述】:

我有两个相似的布局文件item_array_adapteritem_recycler_adapter。第一个有一些特定的视图属性:

<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data class="ItemDataBinding">
        <variable
            name="item"
            type="com.example.myapp.Item" />
    </data>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/item_text_view"
        android:text="@{item.getName()}"
        //Specific View Attributes />
</layout>

第二个完全一样,但有其他视图属性。第一个用于ArrayAdapter

LayoutInflater inflater = LayoutInflater.from(parent.getContext());
int item = R.layout.item_array_adapter; //Different layout
ItemDataBinding binding = DataBindingUtil.inflate(inflater, item , parent, false);

第二个用于RecyclerAdapter

LayoutInflater inflater = LayoutInflater.from(parent.getContext());
int item = R.layout.item_recycler_adapter; //Different layout
ItemDataBinding binding = DataBindingUtil.inflate(inflater, item , parent, false);

问题是我的应用程序失败并显示以下消息:

发现数据绑定错误: [数据绑定] {"msg":"无法写入 com.example.myapp.databinding.ItemDataBindingImpl","file":"D:\Projects\MyApp\app\src\main\res\layout\item_array_adapter.xml" ,"pos":[]}

如果我使用相同的布局,它可以工作。那么如何在具有不同布局的两个适配器中重用相同的ItemDataBinding 类?

【问题讨论】:

  • 通过在数据标签中指定一个类名,您将强制库将该名称用于生成的类。是故意的吗?因为如果您为两个布局指定了相同的名称,则第二个将尝试生成具有相同名称的文件并且可能会失败。我想这就是你错误的原因。您可以重用数据绑定类,但不能像您尝试那样使用不同的布局。每个指定为数据绑定布局的不同布局都将生成一个特定的数据绑定类。
  • @OyaCanlı 非常感谢您对我的问题发表评论。我认为您应该将其添加为答案。
  • 好的,完成!不客气!

标签: android android-recyclerview android-arrayadapter android-databinding


【解决方案1】:

通过在数据标签中指定类名,如下所示:

<data class="ItemDataBinding">

您正在强制库为生成的类使用该名称。是故意的吗?因为如果您为两个布局指定了相同的名称,则第二个将尝试生成具有相同名称的文件或覆盖现有生成的文件,并且可能会失败。我想这就是你错误的原因。 您可以重用数据绑定类,但不能像您尝试那样使用不同的布局。每个被指定为数据绑定布局的不同布局(通过使用布局标签)将生成一个单独的绑定类。

如果你从数据标签中删除类名,它会正常工作。

【讨论】:

    【解决方案2】:

    为每个布局生成两个不同的 DataBinding 类,即ItemArrayAdapterbindingItemRecyclerAdapterbinding

    你看不到这两者之间有任何关系,你当然不能为不同的布局使用同一个 Binding 类。

    【讨论】:

    • 只有一个文件ItemDataBinding.java和一个ItemDataBindingImpl.java。适配器没有类。我的数组适配器类没有特定的 DataBinding 类,也没有我的回收器适配器。怎么办?
    猜你喜欢
    • 1970-01-01
    • 2016-04-15
    • 2021-08-26
    • 2019-01-24
    • 1970-01-01
    • 2022-09-09
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多