android data binding jetpack II 動態數據更新

android data binding jetpack VIII BindingConversionhtml

android data binding jetpack VII @BindingAdapterandroid

android data binding jetpack V 實現recyclerview 綁定框架

android data binding jetpack IV 綁定一個方法另外一種寫法和參數傳遞post

android data binding jetpack III 綁定一個方法性能

android data binding jetpack II 動態數據更新學習

android data binding jetpack I 環境配置 model-view 簡單綁定ui

 

 

 

 

繼續記錄。this

第一個實例綁定了數據和UI。spa

按本身的思路來繼續學習。code

綁定後更新數據怎麼辦?

來學習 

動態數據更新notifyPropertyChanged

來實現最簡單的更新。

第一步:給原來的USER類加上觀察者接口。

第二步:變化時通知更新。notify一下。

同時給屬性雖上註解,這是規則,先這麼作。

 

具體代碼以下:

package com.ht.jetpack;


import android.databinding.BaseObservable;
import android.databinding.Bindable;

import com.ht.jetpack.BR;

/**
 * User
 */
public class User extends BaseObservable {

    public User(String name, int age) {
        this.age = age;
        this.name = name;
    }

    String name = "";
    int age = 0;

    @Bindable
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
        notifyPropertyChanged(BR.age);
    }

    @Bindable
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        notifyPropertyChanged(BR.name);
    }
}

 

運行起來之後,只要user對象的值發生了變化,那麼TextView 的顯示會跟着變化。

 

補充更新方法:

更加簡單的方法

上一部分中,僅僅爲了讓user在本身的name屬性發生變化時通知DataBinding框架,咱們要作許多工做,又是繼承,又是加註解的,確實有點麻煩!

爲此,DataBinding框架給咱們提供一個簡便方法,那就是使用ObservableField。使用它,咱們的User類將變成這樣:

public class User{ public final ObservableField<String> name = new ObservableField<>(); public User(String name) { this.name.set(name); } } 

而後,將按鈕的點擊監聽器中的代碼變成這樣:
user.name.set("Not milter");

這就能夠了,效果和以前是同樣同樣的。
更進一步,若是屬性是基本數據類型,DataBinding框架還提供了專門的屬性類:

ObservableBoolean,
 ObservableByte, 
 ObservableChar, 
 ObservableShort, 
 ObservableInt,
 ObservableLong,
 ObservableFloat, 
 ObservableDouble, 
 ObservableParcelable

再進一步,若是屬性是集合,DataBinding框架也提供了專門的類:

ObservableArrayMap
ObservableArrayList

使用ObservableField 等ObservableXXX類,可讓咱們省去繼承BaseObservable、添加註解,通知DataBinding框架等麻煩,但天下沒有免費的午飯,代價就是性能會下降,因此只能在少許屬性上這樣用,若是大量使用,用戶體驗可能不太好。 好了,關於Observable的部分就到這裏了,忽然發現文章已經不短了。只好下一節再講BindingAdapter。

相關文章
相關標籤/搜索