得意犹堪夸世俗,诏黄新湿字如鸦。这篇文章主要讲述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();
这种方式就方便多了;
【android -------- Data Binding的使用Observable】
推荐阅读
- mac通过chrome调试安卓
- cocos2d-x学习之路——分析AppDelegate和HelloWorldScene文件
- POJ3321 - Apple Tree DFS序 + 线段树或树状数组
- 关于Android studio的安装和配置问题
- cocos构建的android项目的返回键相应
- 通俗易懂讲解happens-before原则
- Edge-assisted Tra?ic Engineering and applications in the IoT
- Android的一些框架
- 安卓开发(获取手机通讯录信息)