我可以从我的ORM(Cupboard)中获取POJO,但我无法弄清楚如何编写xml来绑定到这样的列表。除a very brief mention of using them inside a ListView or RecyclerView外,所有示例都是单数。因此,我尝试在xml文件中使用单一绑定,以便我充满"每个项目再次。该代码如下:
private void listThings() {
LinearLayout gList = (LinearLayout) findViewById(R.id.thingList);
gList.removeAllViews();
SQLiteDatabase db = new CGDatabaseHandler(gList.getContext()).getReadableDatabase();
DatabaseCompartment dbc = cupboard().withDatabase(db);
QueryResultIterable<Thing> itr = null;
try {
itr = dbc.query(Thing.class).query();
for (Thing thing : itr) {
// use data binding to create a UI widget for each
LayoutInflater inflater = (LayoutInflater) getBaseContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ThingDocumentLabelBinding binding = DataBindingUtil.inflate(inflater,
R.layout.thing_document_label, gList, false);
binding.setThing(thing);
//
gList.addView(binding.getRoot());
}
} finally {
// close the cursor
if (itr != null)
itr.close();
}
}
我知道这使用的是LinearLayout而不是ListView或RecyclerView。有什么区别?我无法在ListView中显示任何内容。 ListView似乎也不支持使用removeAllViews清除列表。 这是文件thing_document_label.xml
的XML<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="thing"
type="com.example.Thing"/>
</data>
<TextView android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="20dp"
android:paddingTop="20dp"
android:text="@{@string/thing_document_label(thing.gName, thing.dstName, thing.property3)}"
>
</TextView>
</layout>
我得到的是在我的LinearLayout中显示的单个TextView。我应该看到他们中的六个。在我开始尝试进行数据绑定之前,我让它们出现了。我刚刚将TextView子类化,并在此处显示的同一循环中实例化它们。这很好,但我在这个应用程序的开始阶段,我想尽可能标准化数据绑定。