Android: передавать разный контент из viewmodel в разные теги include - PullRequest
0 голосов
/ 26 мая 2018

В моем приложении задач я хочу использовать привязку данных для обзора задач.Я сгруппировал задачи в три категории: просроченные, сегодняшние и будущие.

My task_overview.xml определяет следующую модель представления (которая содержит три массива с различными задачами)

<data>
    <variable
        name="viewModel"
        type="de.taskapp.ui.taskOverview.viewmodel.TaskOverviewViewModel" />
</data>

Несколько шагов спустя я включаю макет для трех списков задач с тегом includeкак это

<include layout="@layout/layout_task_list"
                     android:id="@+id/overdued_tasks_list"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     app:layout_constraintTop_toBottomOf="@id/headline"/>

            <include layout="@layout/layout_task_list"
                     android:id="@+id/todays_tasks_list"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     app:layout_constraintTop_toBottomOf="@id/overdued_tasks_list"/>

            <include layout="@layout/layout_task_list"
                     android:id="@+id/future_tasks_list"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     app:layout_constraintTop_toBottomOf="@id/todays_tasks_list"/>

Было бы замечательно, если бы я мог сделать что-то вроде этого, чтобы передать различные списки из модели представления в layout_task_list.xml через тег include

app:entries="@{viewModel.todaysTasks}" // for the todays task list case

Мой layout_task_list.xml выглядит так

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
<data>
    <variable
        name="tasks"
        type="android.databinding.ObservableArrayList" />
</data>

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.AppCompatTextView
        android:id="@+id/subheading"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/SubheadlineWithBackground"
        tools:text="Heute"/>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/task_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/spacing_large"
        android:layout_marginRight="@dimen/spacing_large"
        android:nestedScrollingEnabled="false"
        app:entries="@{tasks}" //recyclerviewbinding is already there
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
        app:layout_constraintTop_toBottomOf="@id/subheading"/>
</android.support.constraint.ConstraintLayout>

Как вы можете предположить ... код не работает.Это сообщение об ошибке отображается

data binding error ****msg:Cannot find the setter for attribute 'app:entries' with parameter type android.databinding.ObservableList<de.taskapp.data.entity.Task> on de.molske.einfachmachen.databinding.LayoutTaskListBinding. file:/Users/app/src/main/res/layout/layout_task_overview.xml loc:38:40 - 38:60 ****\ data binding error ****

Хорошо, да, это говорит мне, что он не может найти установщик для приложения: записи ... но разве нет "прекрасного" способа передать три списка тремвключаемых макетов?Мне не нравится идея копировать и вставлять один и тот же макет три раза, чтобы можно было пропустить разные списки.

Заранее спасибо.

(пс: я знаю, что есть возможность решить эту проблему с помощью кода Java / Android, но я хотел бы знать, есть ли способ сделать это с помощью базы данных; -)

1 Ответ

0 голосов
/ 27 мая 2018

Хорошо, классика я.После нескольких поисков я нашел решение.При добавлении следующих строк в раздел data включенного файла все работает отлично!

<import type="java.util.List"/>
<import type="de.molske.einfachmachen.data.entity.Task"/>
<variable name="title" type="java.lang.String"/>
<variable
    name="tasks"
    type="List&lt;Task&gt;"/>

Кажется, что важно определить точный тип переменной tasks.Потому что его тип является родовым &lt; и &gt; вместо <и> для определения типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...