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一下。

同时给属性虽上注解,这是规则,先这么做。

具体代码如下:

  1. package com.ht.jetpack;
  2.  
  3. import android.databinding.BaseObservable;
  4. import android.databinding.Bindable;
  5.  
  6. import com.ht.jetpack.BR;
  7.  
  8. /**
  9. * User
  10. */
  11. public class User extends BaseObservable {
  12.  
  13. public User(String name, int age) {
  14. this.age = age;
  15. this.name = name;
  16. }
  17.  
  18. String name = "";
  19. int age = 0;
  20.  
  21. @Bindable
  22. public int getAge() {
  23. return age;
  24. }
  25.  
  26. public void setAge(int age) {
  27. this.age = age;
  28. notifyPropertyChanged(BR.age);
  29. }
  30.  
  31. @Bindable
  32. public String getName() {
  33. return name;
  34. }
  35.  
  36. public void setName(String name) {
  37. this.name = name;
  38. notifyPropertyChanged(BR.name);
  39. }
  40. }

运行起来以后,只要user对象的值发生了变化,那么TextView 的显示会跟着变化。

补充更新方法:

更加简单的方法

上一部分中,仅仅为了让user在自己的name属性发生变化时通知DataBinding框架,我们要做许多工作,又是继承,又是加注解的,确实有点麻烦!

为此,DataBinding框架给我们提供一个简便方法,那就是使用ObservableField。使用它,我们的User类将变成这样:

  1. public class User{
  2. public final ObservableField<String> name = new ObservableField<>();
  3. public User(String name) {
  4. this.name.set(name);
  5. }
  6. }

然后,将按钮的点击监听器中的代码变成这样:
user.name.set("Not milter");

这就可以了,效果和之前是一样一样的。
更进一步,如果属性是基本数据类型,DataBinding框架还提供了专门的属性类:

  1. ObservableBoolean,
  2. ObservableByte,
  3. ObservableChar,
  4. ObservableShort,
  5. ObservableInt,
  6. ObservableLong,
  7. ObservableFloat,
  8. ObservableDouble,
  9. ObservableParcelable

再进一步,如果属性是集合,DataBinding框架也提供了专门的类:

  1. ObservableArrayMap
  2. 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. linux 下vim 开发环境配置(通用所有编程语言)

    1.下载 http://www.iterm2.com/ 2.oh-my-zsh curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master ...

  2. 公众平台第三方平台 .NET开发

    前言:本博客借鉴了很多三方内容整理的,参考博客:竹叶苿. 一.开发的目的(以下是引用官方的话) 公众平台第三方平台 是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可 ...

  3. jdk中集成的jre和单独安装的jre有什么区别?

    jdk 和 jre 是什么? 有什么区别? jre Jre 是java runtime environment, 是java程序的运行环境.既然是运行,当然要包含jvm,也就是大家熟悉的虚拟机啦,还有 ...

  4. 【异常】Caused by: org.apache.phoenix.coprocessor.HashJoinCacheNotFoundException:

    1 详细异常 Caused by: org.apache.phoenix.coprocessor.HashJoinCacheNotFoundException: ERROR 900 (HJ01): H ...

  5. 微软宣布加入机密计算联盟,与谷歌和BAT 等巨头联手保护数据安全

    联盟创始成员还包括阿里巴巴.Arm.百度.谷歌.IBM.英特尔.红帽.瑞士电信和腾讯等科技公司,它提供了一个让行业聚集起来的机会,以促进使用机密计算来更好地保护数据. 建立机密计算联盟的需求源于这样一 ...

  6. Cubase如何进行音频移调

  7. NLP/CL 顶会收录

    全文转载自知乎@刘知远老师:初学者如何查阅自然语言处理学术资料(2016修订版). 1. 国际学术组织.学术会议与学术论文 自然语言处理(natural language processing,NLP ...

  8. shell命令学习记录

    id id会显示用户以及所属群组的实际与有效ID hostname 用来显示或者设置主机名(show or set the system’s host name).环境变量HOSTNAME也保存了当前 ...

  9. python学习笔记(三)条件判断和循环

    1.条件判断语句 Python中条件选择语句的关键字为:if .elif .else这三个.其基本形式如下: 1 2 3 4 5 6 7 8 9 age_of_cc = 27   age = int( ...

  10. Linux之yum软件管理

    YUM yum = Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包.它能自动解决包的倚赖性问题. 它能便于管理大量系统的更新问题 yum特点 *可以 ...