在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引用一个方法,你需要使用“::”
**正确的答案在这里,更明确地说明**
如果这不工作…在您的模型getListSize()中创建一个方法,并返回列表的大小使用@ {viewmodel :: getListSize()}!