私のタスクアプリでは、タスクの概要にデータバインディングを使用したいと考えています。タスクを 3 つのカテゴリ (期限切れ、今日、将来) にグループ化しました。
私の task_overview.xml は、次のビューモデルを定義します (これには、異なるタスクを持つ 3 つの配列リストが含まれます)
<data>
<variable
name="viewModel"
type="de.taskapp.ui.taskOverview.viewmodel.TaskOverviewViewModel" />
</data>
数ステップ後、次のように include タグを使用して 3 つのタスク リストのレイアウトを含めます。
<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"/>
include タグを介してビューモデルから layout_task_list.xml にさまざまなリストを渡すために、このようなことができれば最高です。
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 ****
わかりました、彼は app:entries のセッターを見つけることができないと言っています...しかし、3つのリストを3つのインクルードレイアウトに渡す「美しい」方法はありませんか? 異なるリストを渡すためだけに、同じレイアウトを 3 回コピーして貼り付けるという考えは好きではありません。
前もって感謝します。
(ps .: Java / Android コードでこれを解決できる可能性があることは知っていますが、これを行うためのデータバインド方法があるかどうか知りたいです ;-)