如何使用Android数据绑定填充列表?

时间:2016-05-10 00:45:00

标签: java android mvvm android-xml android-databinding

我可以从我的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子类化,并在此处显示的同一循环中实例化它们。这很好,但我在这个应用程序的开始阶段,我想尽可能标准化数据绑定。

0 个答案:

没有答案