Android数据绑定 - ObservableArrayMap如何在POJO中实现

时间:2016-01-11 01:11:22

标签: android data-binding

来自data binding

上的android博客的observable objects部分

除非使用ObservableFields,否则POJO类应扩展BaseObservable。让我们看一下我目前的POJO,它非常简单,只存储一个observableInt:

public class User {
public ObservableInt visible;

public User(int visible) {
    this.visible=new ObservableInt(visible);
}

}

我想在这个pojo中添加一个Observable Collection,但是如果我这样做,我还不清楚如何布局xml。我怎么称呼它。假设我想将当前的数组映射添加到我的POJO:

ObservableArrayMap<String, Object> myCollection = new ObservableArrayMap<>();
myCollection.put("firstName", "Google");
myCollection.put("lastName", "Inc.");
myCollection.put("age", 17);

如何将其合并到我的xml中以进行数据绑定。我的xml文件很简单,如下所示:

    <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable name="user" type="com.example.android.floatingactionbuttonbasic.User"/>
    </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="my first textview"/>

        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="my second textview"
            android:visibility="@{user.visible}"/>

    </LinearLayout>
</layout>

我很困惑如何将ObservableArrayMap的变量添加到此xml文件中并能够使用它。有人可以帮忙吗?我觉得我可以把它传递给用户POJO罚款,它只是来自xml我不知道我是如何引用它的?我混淆的原因是因为ObservableArrayMap将成为User类的一个属性,我如何访问它,因为它将成为User类的成员?

1 个答案:

答案 0 :(得分:3)

您可以像使用xml中的任何其他公共可观察对象一样访问地图值。

例如:

public class Model{
    public ObservableArrayMap<Integer,String> MyMap=new ObservableArrayMap<>();
    public Model(){
        MyMap.put(1,"easy");
    }
}

从xml访问值:

 <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="model"
            type="de.example.models.Model"/>

    </data>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="@dimen/padding"
        android:text="@{model.MyMap.get(1)}"/>
</layout>