DataBinding 学习系列(3)新增的可见字段来编写对象(bean)
前言之前主要都是在讲DataBinding在xml中的使用,基本上满足了大部分的需求了,但是不能放下前进的脚步,了解和使用DataBinding中的可见字段,绝对是一件锦上添花的事情。 实战首先来看一下之前的User代码 /** * Created by li.zhipeng on 2017/2/10. * * 测试用的User类 */
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
非常简单的User类,只有一个name属性。如果有一种情况,如果User的name在设置了之后,又发生了变化,我需要更新显示的name的View,怎么办? 这样的代码已经达不到我们需要的效果,所以我要借助DataBinding中的BaSEObservable接口。 /** * Created by li.zhipeng on 2017/2/10. * * 测试用的User类 */
public class User extends BaSEObservable {
@Bindable
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
notifyPropertyChanged(BR.name);
// notifyChange();
}
}
从上面的代码看出,集成了BaSEObservable接口之后,出现了三个新的方法: notifyChange() :对象已经发生改变,所有绑定过该对象的view都需要刷新。 notifyPropertyChanged(BR.name) : 对象的某一个属性发生了改变,通过使用了这个属性的view进行更新。 @Bindable : 把某一个对象的属性绑定到BR文件中,代码中对name进行了绑定,所以在BR中就出现了BR.name, 来直接找到这个属性。 这样就已经达到了我们想要的效果,其实DataBingding除了提供了可见接口来帮助我们实现这种效果,还提供了可见字段: ObservableBoolean,ObservableByte,ObservableChar 等基本数据类型,还包括对象类型ObservableField等。 可见字段是独立字段的可见对象,原始版本在访问操作中避免装箱和拆箱,为方便使用,在数据类创建中使用 pulic final。 下面来再次修改User的代码: /** * Created by li.zhipeng on 2017/2/10. * * 测试用的User类 */
public class User{
public final ObservableField<String> name = new ObservableField<>();
}
非常的简洁,看上去应该是对String进行了一次包装,使用起来非常简便。 可见集合在提供了基本字段以外,还提供了可见集合: ObservableArrayMap和ObservableArrayList。 使用方法 ObservableArrayMap<String,Object> userMap = new ObservableArrayMap<>();
userMap.put("firstName","Google");
userMap.put("lastName","Inc.");
userMap.put("age",17);
<data>
<import type="android.databinding.ObservableMap"/>
<import type="com.example.my.app.Fields"/>
<variable name="user" type="ObservableMap<String,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["age"])}'
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
ObservableArrayList<Object> userList = new ObservableArrayList<>();
userList.add("Google");
userList.add("Inc.");
userList.add(17);
<data>
<import type="android.databinding.ObservableList"/>
<variable name="user" type="ObservableList<Object>"/>
</data>
…
<TextView
android:text='@{user[0]}'
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text='@{String.valueOf(1 + (Integer)user[2])}'
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
我们队上面的使用进行一下总结: 1、在java代码中,没有变化,使用方法和普通的HashMap、ArrayList没有区别。 2、在xml中,ObservableArrayMap可以根据索引key来获取集合中的对象,ObservableList可以通过坐标来获取对象。 3、手动引入了Field类,所以能够在xml中使用Field中的静态成员变量LAST_NAME,默认引入了java.lang.*,所以能够直接使用String的静态方法。 4、可以在xml进行强制转换。 总结DataBinding中的可见接口和字段,我们都已经掌握的差不多了,使用DataBinding将会更加轻松, 代码可会更加简洁,下一篇就讲一下DataBinding的高级用法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- PostgreSQL教程(一):数据表详解
- 详解如何让Express支持async/await
- cocos2d-iphone – Cocos2d 2.0 – 忽略层/精灵透
- c# – 优化/读取/写入共享resoruce的最佳方式
- React Native for android——React Native 介绍
- CTSC 97 选课 ----树形依赖背包
- ruby-on-rails – Ruby Rails Lib文件夹命名约定
- PostgreSQL中的替代变量
- 交换机上的trunk,hybrid,access配置和应用
- VideoIO Flash-based audio and video communica