在Android Databinding中绑定ObservableList的大小

我怎样才能在我的视图绑定一个ObservableList的大小?
我在我的android应用程序中使用ObservableList的数据绑定库,如下所示:

 // ViewModel class ViewModel { ... public final ObservableList<Item> items = new ObservableList<>() ... } 

和我的观点

 // View <layout> <data> <variable name="viewmodel" type="com.myapp.ViewModel" /> </data> <TextView ... android:text="@{viewmodel.items.???}" /> </layout> 

在视图TextView我想显示项目列表的大小。 我尝试使用android:text="viewmodel.items.size或“ viewmodel.items.size()但这并不奏效,我该怎么做?

在Dany Minassians的帮助下,我找到了以下两个解决方案:

直接size()方法

items.size()作用。 问题是,它返回一个Integer,因此必须被转换为android:text元素的字符串。 这可以通过String.valueOf()方法来完成。

 <layout> <data> <variable name="viewmodel" type="com.myapp.ViewModel" /> </data> <TextView ... android:text="@{String.valueOf(viewmodel.items.size())}" /> </layout> 

使用辅助方法

viewmodel可以定义像sizeOfList(List list)这样的方法,可以像这样在视图中使用:

 <layout> <data> <variable name="viewmodel" type="com.myapp.ViewModel" /> </data> <TextView ... android:text="@{String.valueOf(viewmodel.sizeOfList(viewmodel.items))}" /> </layout> 

不正确

 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="viewmodel" type="com.myapp.ViewModel "/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{viewmodel.items::size()}"/> </LinearLayout> </layout> 

我想你只是忘了@ {::} …这样试一下,因为ObservableList从List继承size()函数根据https://developer.android.com/reference/android/databinding/ObservableList.html并根据https://developer.android.com/topic/libraries/data-binding/index.html#method_references引用一个方法,你需要使用&#x201C;::”

**正确的答案在这里,更明确地说明**

如果这不工作…在您的模型getListSize()中创建一个方法,并返回列表的大小使用@ {viewmodel :: getListSize()}!