在我的任务应用程序中,我想使用数据绑定来完成任务概述。我将任务分为三类:逾期,今天和未来。
我的task_overview.xml定义了以下viewmodel(包含三个具有不同任务的arraylists)
<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"/>
如果我可以通过include标记将不同的列表从viewmodel传递给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 ****
好吧是的,它告诉我他找不到应用程序的设置者:条目......但是不是有一种“漂亮”的方式将三个列表传递给三个包含布局?我不喜欢复制和粘贴相同布局三次的想法,只是为了能够传递不同的列表。
提前致谢。
(ps。:我知道有可能通过java / android代码解决这个问题,但我想知道是否有数据绑定方式来做到这一点; - )
答案 0 :(得分:0)
好的,经典的我。经过几次谷歌搜索后,我找到了解决方案。将下一行添加到所包含文件的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<Task>"/>
似乎定义tasks
变量的确切类型很重要。因为它的类型是基因<
和>
而不是&lt;和&gt;用于定义类型。