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的用法,请参见我的博客 ...
随机推荐
- 使用Flume+Kafka+SparkStreaming进行实时日志分析
每个公司想要进行数据分析或数据挖掘,收集日志.ETL都是第一步的,今天就讲一下如何实时地(准实时,每分钟分析一次)收集日志,处理日志,把处理后的记录存入Hive中,并附上完整实战代码 1. 整体架构 ...
- QTableView的indexAt使用方法
要实现的功能是QTableview中Item项上右键弹出菜单这就必然要判断点击右键时鼠标指针是否在QTableView的Item上 如果是QTableWidget可以用itemAt来判断QTableV ...
- 9.SpringJDBC模板类
1. Spring框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单 2. 提供了JDBC模板,Spring框架提供的 * JdbcTemplate类 3. Spring框架可以整 ...
- 阿里巴巴飞天大数据架构体系与Hadoop生态系统
很多人问阿里的飞天大数据平台.云梯2.MaxCompute.实时计算到底是什么,和自建Hadoop平台有什么区别. 先说Hadoop 什么是Hadoop? Hadoop是一个开源.高可靠.可扩展的分布 ...
- 菜鸟nginx源码剖析数据结构篇(十一) 共享内存ngx_shm_t[转]
菜鸟nginx源码剖析数据结构篇(十一) 共享内存ngx_shm_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn ...
- 主机入侵防御系统(HIPS)分析
主机入侵防御系统(Host Intrusion Prevent System,HIPS)是近几年出现并迅速发展的新兴产物,与传统意义的防火墙和杀毒软件不同,它并不具备特征码扫描和主动杀毒等功能,所以想 ...
- Android基础控件ListView和自定义BaseAdapter适配器
1.简介 ListView用于列表显示,相当于OC中的TableView,和适配器一块使用,相关属性: footerDividersEnabled:是否在footerView(表尾)前绘制一个分隔条, ...
- OpenCASCADE 7.4.0 Released
Open Cascade is pleased to announce a new public release of Open CASCADE Technology (version 7.4.0). ...
- webGL动画
在做这个项目之前,我也和很多人的想法一样觉得:H5做动画性能不行,只能完成简单动画,可是事实并非如此.所以借此篇分享振奋下想在H5下做酷炫游戏的人心. 体验游戏请长按二维码识别: 好吧,知道你懒.不想 ...
- MyBatis - sqlMapConfig.xml主配置文件
SqlMapConfig.xml配置文件的内容和配置顺序如下 ① properties(读取配置文件):定义配置,配置的属性可以在整个配置文件中其他位置进行引用: ② settings(全局配置参数) ...