android 数据绑定(3)自动更新UI
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的更多相关文章
- Android接入百度自动更新SDK
一:前言 公司的app,上传到百度应用市场,然后说必须要接入百度的自动更新sdk才能上架,于是从百度官网上去下载jar包,下载的时候必须要带上数据统计,如果使用自动的jar包,还需要带上广告联盟,坑爹 ...
- Android线程间通信更新UI的方法(重点分析EventBus)
Android的UI更新只能在UI线程中,即主线程.子线程中如果要进行UI更新,都是要通知主线程来进行. 几种实现方式总结如下,欢迎补充. 1.runOnUiThread() 子线程中持有当前Acti ...
- [转]Android应用的自动更新
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...
- android之apk自动更新解析包失败问题
在apk自动更新(相关问题可以看我的博客http://blog.csdn.net/caicongyang) 从服务器下载完成后,点击notification提示安装时,每次都报解析包失败错误!首先我想 ...
- 老问题:Android子线程中更新UI的3种方法
在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 方法一:用Handler 1.主线程中定义Handler: Handle ...
- Android App版本自动更新
App在开发过程中,随着业务场景的不断增多,功能的不断完善,早期下载App的用户便无法体验最新的功能,为了能让用户更及时的体验App最新版本,在App开发过程加入App自动更新功能便显得尤为重要.更新 ...
- 【Android 应用开发】Android应用的自动更新模块
. 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 软件的自动更新一般都与Splash界 ...
- 安卓程序代写 网上程序代写[原]Android应用的自动更新模块
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...
- android基础---->子线程更新UI
和许多其他的GUI 库一样,Android 的UI 也是线程不安全的.也就是说,如果想要更新应用程序里的UI 元素,则必须在主线程中进行,否则就会出现异常.了解AsyncTask的用法,请参见我的博客 ...
随机推荐
- Spark历险记之编译和远程任务提交
Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架.Spark在2013年6月进入Apach ...
- 2018-2-13-安装visualStudio-出现-cant-install-Microsoft.TeamFoundation.OfficeIntegration.Resources...
title author date CreateTime categories 安装visualStudio 出现 cant install Microsoft.TeamFoundation.Offi ...
- QTableView的indexAt使用方法
要实现的功能是QTableview中Item项上右键弹出菜单这就必然要判断点击右键时鼠标指针是否在QTableView的Item上 如果是QTableWidget可以用itemAt来判断QTableV ...
- uoj279 题目交流通道
题目:告诉你每两个点之间的最短路距离.构造每条边边权<=m的无向完全图.求有多少种不同边权的图满足最短路限制?n<=400. 标程: #include<cstdio> #inc ...
- Java虚拟机性能管理神器 - VisualVM(5) 监控远程主机上的JAVA应用程序【转】
Java虚拟机性能管理神器 - VisualVM(5) 监控远程主机上的JAVA应用程序[转] 标签: javajvm监控工具性能优化 2015-03-11 18:37 1394人阅读 评论(0) 收 ...
- 0901NOIP模拟测试赛后总结
突然想学迪哥列一下分数线搞清楚自己和别人的差距. rank1- 5- 6-分. 差距很大啊.尤其是和某kyh.大家都开玩笑说天皇是个变态.但是事实摆在这儿,同样坐在机房这么长的时间,人家又AK了. 我 ...
- pb_ds(平板电视)简介
据说NOI赛制可以用pbds,故整理常用方法: 1.splay 所需声明及头文件: #include <ext/pb_ds/tree_policy.hpp> #include <ex ...
- springboot与任务(异步任务)
描述:在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x ...
- JDK源码阅读--StringBuilder
public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, Char ...
- java代码优化写法1(转摘)
源文地址:https://blog.csdn.net/qq_15766297/article/details/70503222 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修 ...