1.官方文档

  https://developer.android.com/topic/libraries/data-binding/observability

2.observable 属性

  适合对象只有少量属性,每个属性用 ObservableField<xxx> 、ObservableInt、ObservableParcelable、ObservableBoolean 等保存。

基本类型
ObservableBoolean ObservableByte
ObservableChar ObservableShort
ObservableInt ObservableLong
ObservableFloat ObservableDouble
复杂类型
ObservableParcelable ObservableField<非基本类型,如Student> 
ObservableArrayMap ObservableArrayList

2.1 数据源类定义

 //2.修改数据动更新ui版本
public class Data { public ObservableInt icon = new ObservableInt();
public ObservableField<String> key = new ObservableField();
public ObservableInt value = new ObservableInt(); @Override
public String toString() {
return "key = " + key + " value = " + value;
}
}

2.2 使用绑定

         <TextView
android:id="@+id/key"
android:text='@{data.key, default = "default" }'/> <TextView
android:id="@+id/value"
android:text="@{String.valueOf(data.value),default = value}" /> <ImageView
android:id="@+id/imageView"
app:bindingImgSrc="@{data.icon}" />

2.3 修改数据源对象

     @OnClick(R.id.btnSave)
public void onSaveClicked(View view){
//...
data.key.set(newKey);
data.value.set(newValue); int id = main.data.icon.get();
data.icon.set(R.mipmap.girl); }

  使用get(),set(xxx) 访问和修改它们。

2.4 ObservableArrayMap

 ObservableArrayMap<String, Object> user = new ObservableArrayMap<>();
user.put("firstName", "Google");
user.put("lastName", "Inc.");
user.put("age", );

使用

 <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"/>

2.5 ObservableArrayList

 ObservableArrayList<Object> user = new ObservableArrayList<>();
user.add("Google");
user.add("Inc.");
user.add();

使用

 <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"/>

3.自定义observable对象

  • 使用@Bindable修饰get方法
  • 在setter方法中使用 notifyPropertyChanged(BR.xxx);

3.1 声明数据类

 class Daily : BaseObservable() {

     @get:Bindable var week          =
set(value){
field = value
notifyPropertyChanged(BR.week)
} @get:Bindable var onbed = 0L
set(value){
field = value
notifyPropertyChanged(BR.onbed)
}
@get:Bindable var call =
set(value){
field = value
notifyPropertyChanged(BR.call)
} @get:Bindable var urgent =
set(value){
field = value
notifyPropertyChanged(BR.urgent)
} @get:Bindable var date = ""
set(value){
field = value
notifyPropertyChanged(BR.date)
} var record : List<Record> = ArrayList() }

3.2 使用绑定数据

  与2.2一样。

3.3 修改数据对象

     @OnClick(R.id.btnSave)
public void onSaveClicked(View view){ //...
data.setKey(newKey);
data.setValue(newValue); data.setIcon(R.mipmap.girl); }

  注意:这种方式在java代码中只有调用setXXX才自动更新,data.key = "xxx"不会自动更新。

android 数据绑定(3)自动更新UI的更多相关文章

  1. Android接入百度自动更新SDK

    一:前言 公司的app,上传到百度应用市场,然后说必须要接入百度的自动更新sdk才能上架,于是从百度官网上去下载jar包,下载的时候必须要带上数据统计,如果使用自动的jar包,还需要带上广告联盟,坑爹 ...

  2. Android线程间通信更新UI的方法(重点分析EventBus)

    Android的UI更新只能在UI线程中,即主线程.子线程中如果要进行UI更新,都是要通知主线程来进行. 几种实现方式总结如下,欢迎补充. 1.runOnUiThread() 子线程中持有当前Acti ...

  3. [转]Android应用的自动更新

    软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...

  4. android之apk自动更新解析包失败问题

    在apk自动更新(相关问题可以看我的博客http://blog.csdn.net/caicongyang) 从服务器下载完成后,点击notification提示安装时,每次都报解析包失败错误!首先我想 ...

  5. 老问题:Android子线程中更新UI的3种方法

    在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 方法一:用Handler 1.主线程中定义Handler: Handle ...

  6. Android App版本自动更新

    App在开发过程中,随着业务场景的不断增多,功能的不断完善,早期下载App的用户便无法体验最新的功能,为了能让用户更及时的体验App最新版本,在App开发过程加入App自动更新功能便显得尤为重要.更新 ...

  7. 【Android 应用开发】Android应用的自动更新模块

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 软件的自动更新一般都与Splash界 ...

  8. 安卓程序代写 网上程序代写[原]Android应用的自动更新模块

    软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...

  9. android基础---->子线程更新UI

    和许多其他的GUI 库一样,Android 的UI 也是线程不安全的.也就是说,如果想要更新应用程序里的UI 元素,则必须在主线程中进行,否则就会出现异常.了解AsyncTask的用法,请参见我的博客 ...

随机推荐

  1. Spark历险记之编译和远程任务提交

    Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架.Spark在2013年6月进入Apach ...

  2. 2018-2-13-安装visualStudio-出现-cant-install-Microsoft.TeamFoundation.OfficeIntegration.Resources...

    title author date CreateTime categories 安装visualStudio 出现 cant install Microsoft.TeamFoundation.Offi ...

  3. QTableView的indexAt使用方法

    要实现的功能是QTableview中Item项上右键弹出菜单这就必然要判断点击右键时鼠标指针是否在QTableView的Item上 如果是QTableWidget可以用itemAt来判断QTableV ...

  4. uoj279 题目交流通道

    题目:告诉你每两个点之间的最短路距离.构造每条边边权<=m的无向完全图.求有多少种不同边权的图满足最短路限制?n<=400. 标程: #include<cstdio> #inc ...

  5. Java虚拟机性能管理神器 - VisualVM(5) 监控远程主机上的JAVA应用程序【转】

    Java虚拟机性能管理神器 - VisualVM(5) 监控远程主机上的JAVA应用程序[转] 标签: javajvm监控工具性能优化 2015-03-11 18:37 1394人阅读 评论(0) 收 ...

  6. 0901NOIP模拟测试赛后总结

    突然想学迪哥列一下分数线搞清楚自己和别人的差距. rank1- 5- 6-分. 差距很大啊.尤其是和某kyh.大家都开玩笑说天皇是个变态.但是事实摆在这儿,同样坐在机房这么长的时间,人家又AK了. 我 ...

  7. pb_ds(平板电视)简介

    据说NOI赛制可以用pbds,故整理常用方法: 1.splay 所需声明及头文件: #include <ext/pb_ds/tree_policy.hpp> #include <ex ...

  8. springboot与任务(异步任务)

    描述:在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x ...

  9. JDK源码阅读--StringBuilder

    public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, Char ...

  10. java代码优化写法1(转摘)

    源文地址:https://blog.csdn.net/qq_15766297/article/details/70503222 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修 ...