在Android数据绑定中绑定ObservableList的大小

时间:2017-09-22 05:51:14

标签: android data-binding kotlin

如何在我的视图中绑定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.sizeviewmodel.items.size(),但这不起作用。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

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

直接尺寸()方法

items.size()的使用有效。问题是,它返回一个Integer,因此必须转换为android:text元素的String。这可以使用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>

答案 1 :(得分:0)

<强>不正确

<?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根据https://developer.android.com/reference/android/databinding/ObservableList.html从List继承size()函数 并根据 https://developer.android.com/topic/libraries/data-binding/index.html#method_references 引用您需要使用“::”

的方法

**正确回答此问题并明确说明**

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