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
綁定後更新數據怎麼辦?
來學習
來實現最簡單的更新。
第一步:給原來的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。