zoukankan      html  css  js  c++  java
  • android -------- Data Binding的使用(三)Observable

     

    解决:databinding 中 ViewModel数据发生改变,View中也要改变(实时更新)

    BaseObservable

    在ViewModel 中可以继承 BaseObservable

    public class User extends BaseObservable {
    
        public User(String frstName,String lastName){
            this.frstName = frstName;
            this.lastName = lastName;
            observableArrayMap.put("zq","zhhhhh");
            list.add("aaa");
            list.add("bbb");
        }
    
        private String frstName;
    
        private String lastName;
    
        public ObservableArrayMap<String,String> observableArrayMap = new ObservableArrayMap<>();
    
        public ObservableArrayList<String> list = new ObservableArrayList<>();
    
        @Bindable
        public String getFrstName() {
            return frstName;
        }
    
    
        public void setFrstName(String frstName) {
            this.frstName = frstName;
            //刷新UI
            notifyPropertyChanged(com.zhangqie.databinding.BR.frstName);
        }
    
        @Bindable
        public String getLastName() {
            return lastName;
        }
    
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
            //全部刷新
            //notifyChange();
        }
    }

    在 set 方法里面,使用 notifyPropertyChanged 来通知 UI 刷新,notifyPropertyChanged 只会刷新具体的值,notifyChange 方法则会刷新所有的值。
    BR 的域则是通过在 get 方法上加 @Bindable 生成的。

    ObservableArrayMap

    与Java的Map使用相同

    public ObservableArrayMap<String,String> observableArrayMap = new ObservableArrayMap<>();
    
    observableArrayMap.put(
    "zq","zhhhhh");

    布局中:

    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
    
        <data>
    
            <variable
                name="user"
                type="com.zhangqie.databinding.demo2.User" />
    
        </data>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text='@{user.observableArrayMap["zq"]}' />
    
        </LinearLayout>
    
    </layout>

    ObservableArrayList

    与Java的List使用相同

     public ObservableArrayList<String> list = new ObservableArrayList<>();
     list.add("aaa");
     list.add("bbb");

    布局中:

        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text='@{user.list[0]}' />
    
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{user.list[1]}" />

    Observable Fields

    继承自 BaseObservable 的方法有点复杂,DataBinding 还提供了一种简单的写法—-ObservableField来实现数据实时刷新

    public class UserObservableBean {
        public ObservableInt userId = new ObservableInt();
        public ObservableField<String> userName = new ObservableField<>();
        public ObservableDouble userAge = new ObservableDouble();
        public ObservableFloat userSex = new ObservableFloat();
    }

    直接把属性定义成 ObservableField 类型的,并且修饰符需要是 public final 的。
    除了 ObservableField,还可以使用 ObservableBoolean, ObservableByte, ObservableChar, ObservableShort, ObservableInt, ObservableLong, ObservableFloat, ObservableDouble, ObservableParcelable。
    访问值得时候,可以使用 get set 方法。

    UserObservableBean userBean = new UserObservableBean();
    userBean.userId.set(8);
    userBean.userName.set("切切心语");
    userBean.userAge.set(25);

    userBean.userId.get();
    userBean.userName.get(); userBean.userAge.get();
     

    这种方式就方便多了;

  • 相关阅读:
    Unique Binary Search Trees——LeetCode
    Binary Tree Inorder Traversal ——LeetCode
    Maximum Product Subarray——LeetCode
    Remove Linked List Elements——LeetCode
    Maximum Subarray——LeetCode
    Validate Binary Search Tree——LeetCode
    Swap Nodes in Pairs——LeetCode
    Find Minimum in Rotated Sorted Array——LeetCode
    Linked List Cycle——LeetCode
    VR AR MR
  • 原文地址:https://www.cnblogs.com/zhangqie/p/9638141.html
Copyright © 2011-2022 走看看