android data binding jetpack VIII BindingConversion

android data binding jetpack VII @BindingAdapter

android data binding jetpack V 实现recyclerview 绑定

android data binding jetpack IV 绑定一个方法另一种写法和参数传递

android data binding jetpack III 绑定一个方法

android data binding jetpack II 动态数据更新

android data binding jetpack I 环境配置 model-view 简单绑定

继续记录。

第一个实例绑定了数据和UI。

按自己的思路来继续学习。

绑定后更新数据怎么办?

来学习

动态数据更新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。

android data binding jetpack II 动态数据更新的更多相关文章

  1. android data binding jetpack VIII BindingConversion

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  2. android data binding jetpack VII @BindingAdapter

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  3. android data binding jetpack VI 清理一些概念。BR 运算表达式

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  4. android data binding jetpack V 实现recyclerview 绑定

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  5. android data binding jetpack IV 绑定一个方法另一种写法和参数传递

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  6. android data binding jetpack I 环境配置 model-view 简单绑定

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  7. android data binding jetpack III 绑定一个方法

    第三篇 给view绑定一下方法响应. (补充:1.被绑定的方法必须是public的.   1.绑定方法可以用主语法.也可以用以下双冒号方式“::” android:onClick="@{pr ...

  8. android data binding jetpack VIIII 第一坑

    <LinearLayout android:id="@+id/ll_item_home_page_pics" android:layout_width="wrap_ ...

  9. Android Data Binding代码实践(告别findViewById)(四)

    Data Binding实战(一) Data Binding语法解析(二) Data Binding高级用法(三) 好了,继前三篇学习了Data Binding之后,我们可以发现它的强大之处有这么几点 ...

随机推荐

  1. another-redis-desktop-manager

    brew cask install another-redis-desktop-manager

  2. Tomcat----服务运行的容器

    在介绍Tomcat之前,我们先介绍一个概念Servlet. Servlet是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议.从下图可以看出Ser ...

  3. electron api sendInputEvent 源码

    electron-master\electron-master\shell\browser\api\atom_api_web_contents.cc // Copyright (c) 2014 Git ...

  4. inputrc命令

    问题:搭建ubuntu系统后,输入命令的第一个字符+上页按键,发现不能找到历史命令,找了好久才发现是因为/etc/inputrc没有对键盘映射的上页键和下页键进行设置. 解决方法: 修改文件/etc/ ...

  5. Spinner simpleAdapte适配器 下拉列表

    public class MainActivity extends AppCompatActivity { private TextView text; private Spinner spinner ...

  6. LIBUSB_TRANSFER_ERROR

    首先, 我的设备是一个KNX无线接受模块, 利用UART与主机相连, 看到的设备就是ttyUSBx 利用libusb写了一个程序, 调用同步I/O 的API, 即libusb_bulk_transfe ...

  7. 【wqs二分 || 决策单调性】cf321E. Ciel and Gondolas

    把状态看成层,每层决策单调性处理 题目描述 题目大意 众所周知,贞鱼是一种高智商水生动物.不过他们到了陆地上智商会减半.这不?他们遇到了大麻烦!n只贞鱼到陆地上乘车,现在有k辆汽车可以租用.由于贞鱼们 ...

  8. React组件:Dragact 0.1.4发布

    Dragact 是一款React组件,他能够使你简单.快速的构建出一款强大的 拖拽式网格(grid)布局. 仓库地址:Dragact 经过几天的迭代时间Dragact已经能够支持自由缩放功能了(res ...

  9. IIFE 立即执行函数表达式-模块化

    1)立即执行 2)表达式 3)括号,分号结束 | 前缀运算符 | 表达式上下文 4)只需要执行一次,内部变量无需维护,可用于初始化 (function( ) { })( ); 或 (function( ...

  10. JAVA_GET请求URL

    import java.io.IOException; import net.sf.json.JSONObject; import org.apache.commons.httpclient.Defa ...