Android DataBinding (三) Observable
来源:互联网 发布:json遍历里面的数组 编辑:程序博客网 时间:2024/05/19 23:24
Android DataBinding (一) 基本用法
Android DataBinding (二) 事件处理
Android DataBinding (三) Observable (本文)
Android DataBinding (四) 自定义属性
Android DataBinding (五) 自定义 View 的双向绑定
Android DataBinding (六) EditText 绑定 TextChangedListener 和 FocusChangeListener
BaseObservable
ViewModel 的值变化之后,如果需要画面做相应的刷新,那么可以继承 BaseObservable。
private static class User extends BaseObservable { private String firstName; private String lastName; @Bindable public String getFirstName() { return this.firstName; } @Bindable public String getLastName() { return this.lastName; } public void setFirstName(String firstName) { this.firstName = firstName; notifyPropertyChanged(BR.firstName); } public void setLastName(String lastName) { this.lastName = lastName; notifyPropertyChanged(BR.lastName); }}
在 set 方法里面,使用 notifyPropertyChanged 来通知 UI 刷新,notifyPropertyChanged 只会刷新具体的值,notifyChange 方法则会刷新所有的值。
BR 的域则是通过在 get 方法上加 @Bindable 生成的。
Observable Fields
继承自 BaseObservable 的方法有点复杂,DataBinding 还提供了一种简单的写法—-ObservableField。
private static class User { public final ObservableField<String> firstName = new ObservableField<>(); public final ObservableField<String> lastName = new ObservableField<>(); public final ObservableInt age = new ObservableInt();}
直接把属性定义成 ObservableField 类型的,并且修饰符需要是 public final 的。
除了 ObservableField,还可以使用 ObservableBoolean, ObservableByte, ObservableChar, ObservableShort, ObservableInt, ObservableLong, ObservableFloat, ObservableDouble, ObservableParcelable。
访问值得时候,可以使用 get set 方法。
user.firstName.set("Google");int age = user.age.get();
Observable Collections
如果使用 Map,List 等保存数据。DataBinding 也提供了 ObservableArrayMap,ObservableArrayList。
ObservableArrayMap
ObservableArrayMap<String, Object> user = new ObservableArrayMap<>();user.put("firstName", "Google");user.put("lastName", "Inc.");user.put("age", 17);
<data> <import type="android.databinding.ObservableMap"/> <variable name="user" type="ObservableMap<String, Object>"/></data>…<TextView android:text='@{user["lastName"]}' android:layout_width="wrap_content" android:layout_height="wrap_content"/><TextView android:text='@{String.valueOf(1 + (Integer)user["age"])}' android:layout_width="wrap_content" android:layout_height="wrap_content"/>
ObservableArrayList
ObservableArrayList<Object> user = new ObservableArrayList<>();user.add("Google");user.add("Inc.");user.add(17);
<data> <import type="android.databinding.ObservableList"/> <import type="com.example.my.app.Fields"/> <variable name="user" type="ObservableList<Object>"/></data>…<TextView android:text='@{user[Fields.LAST_NAME]}' android:layout_width="wrap_content" android:layout_height="wrap_content"/><TextView android:text='@{String.valueOf(1 + (Integer)user[Fields.AGE])}' android:layout_width="wrap_content" android:layout_height="wrap_content"/>
- Android DataBinding (三) Observable
- databinding 错误: * is not Observable
- DataBinding难点解析之Observable和BindingAdapter
- Android databinding(详解三)--自定义属性使用
- Android DataBinding使用总结(三)列表展示
- Android databinding(详解三)--自定义属性使用
- Android DataBinding
- Android DataBinding
- Android DataBinding
- Android DataBinding
- Android databinding
- android DataBinding
- jface databinding: 创建readonly(只读)可观察对象(observable)
- jface databinding:List,Set,Map对象的Observable代理封装
- Android官方DataBinding(三):RecyclerView 使用ViewDataBinding更新数据
- Android Observable and Observer
- Android源码之Observable
- Android Observable and Observer
- JDK1.8 HashMap putValue源码解析
- Springboot集成quartz之让项目飞起来(第一期)
- 【JavaScript的算术操作符】
- python Selenium 常见操作 元素定位
- 阿里云centos自带mysql那些事
- Android DataBinding (三) Observable
- Android DataBinding (四) 自定义属性
- 浅谈JVM结构原理与数据区域
- How to Manage your vim plugins
- Android DataBinding (五) 自定义 View 的双向绑定
- 为知识付费买的四个教训
- SXOI2016 期末考试
- Hello android
- android studio 升级到2.3.3修复