Привязка данных для родительского класса в котлине

#android #kotlin #android-layout #android-databinding

Вопрос:

Я хочу создать макет, который можно использовать в различных действиях, поэтому я создаю класс, подобный этому:

 open class Parent(var v1: String?,var v2:String?)
class Child(v1:String?,v2:String?, var v3:String?):Parent(v1,v2)
 

Я создаю макет:

 <?xml version="1.0" encoding="utf-8"?>
<layout>
    <data>
        <variable
            name="data"
            type="androidx.lifecycle.LiveDataamp;<java.util.Listamp;<Parent>>" />
    </data>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/contentAreaColor"
        android:orientation="vertical">
        <androidx.recyclerview.widget.RecyclerView
            android:id="@ id/rv_draw_date"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:items="@{data}"/>
    </LinearLayout>
</layout>
 

В деятельности1. Я пытаюсь установить нижеприведенную строку кода.

 viewModel.data = MutableLikeData<List<Child>>()
...
mBinding.data = viewModel.data <error here>
 

но компиляция исследует сообщение об ошибке:

 >  Type mismatch: inferred type is LiveData<List<Child>> but
> LiveData<(Mutable)List<Parent!>!>? was expected
 

Не могли бы вы помочь мне создать макет, который можно использовать в многочисленных мероприятиях.
Заранее благодарю

Комментарии:

1. Вы хотите создать отдельный файл макета, а затем использовать его в различных действиях / фрагментах и получить к нему доступ с помощью привязки данных ?

2. Я хочу создать единый макет и использовать его для нескольких видов деятельности с различными типами дочерних данных.

3. Тогда что это за ошибка привязки данных, о которой вы там написали ? Это не по теме

Ответ №1:

В принципе, измените MutableLiveData<Список< Дочерний>< Дочерний>>() на

Изменяемые данные<Список< Родитель>< Родитель>>()

 viewModel.data = MutableLiveData<List<Parent>>()