最新要闻
- 环球热点评!5年前就已杀青 周星驰《美人鱼2》进入后期制作
- 谨慎升级 等了2个月的AMD新驱动疑似翻车:系统崩了
- 世界热议:央广网:“暴雪式”傲慢引众怒 或终将致其失去中国市场
- 要闻速递:中国移动:加速千兆网络全面普及 建成全球最大规模光网络
- 中国快递卷了15年:死死困住了一个50岁的老快递员
- 纽约黄金期货周三收跌1.1% 创五周来最低收盘价
- 1998年属虎的人2012年运程
- 今日聚焦!qq情侣网名 〈談情》**/|(說爰)ⅱ,
- 80年代的零食大全怀旧辣条_80年代的零食大全怀旧
- 世界微速讯:2023年春运收官:40天发送旅客近16亿人次 大涨50%
- 香港2022年暴力罪案同比下降7.9%
- 观天下!探险的好处辩论赛,正方_探险的好处
- 全球播报:AMD RX 7600S游戏本显卡首测:远不如RTX 3060!高端弃疗了
- 世界速讯:10道恋爱送命题灵魂拷问ChatGPT:它的回答让我陷入沉思
- 马斯克向往每周只工作80小时!网友:驴都不敢这么用
- 每日速读!中国内地特供!Intel i5-13490F处理器图赏
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
Android JetPack~ LiveData (一) 介绍与使用
(资料图片)
一般情况下LiveData都是搭配这ViewModel使用,这里先介绍一下LiveData,再结合ViewModel使用
- Android数据绑定技术一,企业级开发
- Android数据绑定技术二,企业级开发
- Android JetPack~ DataBinding(数据绑定)(一) 集成与使用
- Android JetPack~ LiveData (一) 介绍与使用
- Android JetPack~ ViewModel (一) 介绍与使用
目录
1、什么是LiveData
2、什么是MutableLiveData
3、LiveData与MutableLiveData区别
4、LiveData的使用
5、MutableLiveData的使用
6、LiveData和MutableLiveData的可变与不可变
7、其他方法
1、什么是LiveData
- LiveData是一个观察者模式的数据实体类,它可以在所有注册观察者回调里查看数据是否有更新。
- LiveData它能感知绑定者的生命周期(如Activity,Fragment),不会发生内存泄露,因为它只会给活跃状态的activity回调,我们在使用的时候通常都会在回调里去更新UI。
- 从非活跃状态变为活跃状态时,回调方法会立即接收到最新的数据
- 当设备切横竖屏,会重建Activity生命周期,它也会立即接收最新的可用数据。
- 不可变,setValue和postValue不支持外部使用(protected修饰)。下面代码讲解
- 抽象类,无法直接new
2、什么是MutableLiveData
- MutableLiveData的父类是LiveData
- 用法和LiveData类似,也是在注册观察者回调里查看更新数据
- 可变,setValue和postValue支持外部使用(public修饰)
- 普通类,可以直接new
3、LiveData与MutableLiveData区别
- LiveData在实体类里可以通知指定某个字段的数据更新.(下面会贴代码)
- MutableLiveData则是完全是整个实体类或者数据类型变化后才通知.不会细节到某个字段
4、LiveData的使用
public class UserBean extends LiveData { String name; int age; public String getName() { return name; } public void setName(String name) { this.name = name; postValue(this); } public int getAge() { return age; } public void setAge(int age) { this.age = age; postValue(this); }}
postValue(this);这个方法是用于触发回调数据更新的方法. 你可以在你需要被观察的数据里添加.小注意点:如果不使用postValue(this)会怎么样?public void setAge(int age) { this.age = age;// postValue(this);// 如果不写的话,单独调用setAge后,在外getAge获取不到值,因为回调没有被触发,// 如果name写了postValue(this),更新了name也会连着age更新,因为传的是this }
你也可以集成LiveData4.1ViewModel新建
public class MyViewModel extends ViewModel { public UserBean mUserBean = new UserBean(); public UserBean getUserBean() { return mUserBean; } }
4.2Activity中添加回调方法
//通过ViewModeProvider 把activity和ViewModel绑定起来。myViewModel = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(MyViewModel.class);observer = new Observer() { @Override public void onChanged(UserBean userBean) { Log.e("activity",userBean.getName()); mBinding.textShow.setText("name="+userBean.getName()+" ,, age="+userBean.getAge()+""); }};//绑定观察者myViewModel.getUserBean().observe(this, observer);a = 0;mBinding.btnUpdata.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { myViewModel.getUserBean().setName("大王"+a); myViewModel.getUserBean().setAge(a++); }});
注意:这里的myViewModel.getUserBean().observe() 是LiveData的方法。我们上面创建了一个Observer,并且和activity关联,然后通过一个按钮去动态设置值,果然回调里就会有数据更新。public void observe(@NonNull LifecycleOwner owner, @NonNull Observer super T> observer) {
4.3有绑定就会有解绑
myViewModel.getUserBean().removeObserver(observer);
5、MutableLiveData的使用
它是直接作用在变量上,mStr.setValue(s);触发观察者的回调。public class MyViewModel extends ViewModel { private MutableLiveData mStr; public MutableLiveData getmStr() { return mStr; } public void setmStr(String s) { if(mStr==null){ mStr = new MutableLiveData<>(); } mStr.setValue(s); }}
5.1在activity中使用
myViewModel.getmStr().observe(this, new Observer() { @Override public void onChanged(String s) { }});
6、LiveData和MutableLiveData的可变与不可变
其实就是setValue和postValue是否暴露问题,LiveData中是不支持外部使用,而MutableLiveData特意放开@SuppressWarnings("WeakerAccess")public class MutableLiveData extends LiveData { @Override public void postValue(T value) { super.postValue(value); } @Override public void setValue(T value) { super.setValue(value); }}
可以看到在MutableLiveData包裹的有setValue,postValue方法当然我们也可以让它不对外暴露setValue,postValue方法,返回值修改为LiveDatapublic class MyViewModel extends ViewModel { private MutableLiveData mStr= new MutableLiveData<>(); public LiveData getmStr() { return mStr; } //在外面只能通过这种方式去更新 public void setmStr(String s) { mStr.setValue(s);}}
7、其他方法
postValue() postValue的特性如下: 1.此方法可以在其他线程中调用 2.如果在主线程执行发布的任务之前多次调用此方法,则仅将分配最后一个值。 3.如果同时调用 .postValue()和.setValue(),结果是post的值覆盖set值。setValue() setValue()的特性如下: 1.此方法只能在主线程里调用getValue() 返回当前值。 注意,在后台线程上调用此方法并不能保证将接收到最新的值。 removeObserver(@NonNull final Observer super T> observer) 移除指定的观察者 removeObservers(@NonNull final LifecycleOwner owner) 移除当前Activity或者Fragment的全部观察者 hasActiveObservers() 如果此LiveData具有活动(Activity或者Fragment在前台,当前屏幕显示)的观察者,则返回true。其实如果这个数据的观察者在最前台就返回true,否则false。hasObservers() 如果此LiveData具有观察者,则返回true。 observe(@NonNull LifecycleOwner owner, @NonNull Observer super T> observer) 设置此LiveData数据当前activity或者Fragment的观察者,会给此activity或者Fragment在前台时回调数据。 observeForever(@NonNull Observer super T> observer) 1.设置永远观察者,永远不会被自动删除。您需要手动调用removeObserver(Observer)以停止观察此LiveData, 2.设置后此LiveData,一直处于活动状态,不管是否在前台哪里都会获得回调。
总结:
LiveData一般使用在实体类,MutableLiveData作用在变量上,他们通常和ViewModel结合使用,上面例子过于简单,工作当中可按照业务需要进行调整。下一篇 Android JetPack~ ViewModel (一) 介绍与使用-
Android JetPack~ LiveData (一) 介绍与使用
一般情况下LiveData都是搭配这ViewModel使用,这里先介绍一下LiveData,再结合ViewModel使用Android数据...
来源: Android JetPack~ LiveData (一) 介绍与使用
环球观热点:SDK多项目开发与联调
全球快看:期末复习——线程
环球热点评!5年前就已杀青 周星驰《美人鱼2》进入后期制作
谨慎升级 等了2个月的AMD新驱动疑似翻车:系统崩了
世界热议:央广网:“暴雪式”傲慢引众怒 或终将致其失去中国市场
要闻速递:中国移动:加速千兆网络全面普及 建成全球最大规模光网络
中国快递卷了15年:死死困住了一个50岁的老快递员
纽约黄金期货周三收跌1.1% 创五周来最低收盘价
1998年属虎的人2012年运程
今日聚焦!qq情侣网名 〈談情》**/|(說爰)ⅱ,
80年代的零食大全怀旧辣条_80年代的零食大全怀旧
【保姆级】Python最新版3.11.1开发环境搭建,看这一篇就够了(适用于Python3.11.2安装)
【天天新要闻】day10-1-中文乱码处理
实时焦点:一次学俩Vue&Blazor:1.4基础-响应式数据
数论模板
世界微速讯:2023年春运收官:40天发送旅客近16亿人次 大涨50%
【环球报资讯】数据结构刷题2023.02.15小记
给我两分钟的时间:微博风格九宫格:UICollectionView实现
《分布式技术原理与算法解析》学习笔记Day12
【算法训练营day45】LeetCode70. 爬楼梯(进阶) LeetCode322. 零钱兑换 LeetCode279. 完全平方数
香港2022年暴力罪案同比下降7.9%
观天下!探险的好处辩论赛,正方_探险的好处
全球播报:AMD RX 7600S游戏本显卡首测:远不如RTX 3060!高端弃疗了
世界速讯:10道恋爱送命题灵魂拷问ChatGPT:它的回答让我陷入沉思
马斯克向往每周只工作80小时!网友:驴都不敢这么用
每日速读!中国内地特供!Intel i5-13490F处理器图赏
天天快看:002. html篇之《表格》
当前视讯!力扣---3. 无重复字符的最长子串
今日热文:轻薄长续航!小新Air14超极本2023发布:标配13代酷睿+1TB SSD
普及1TB 联想小新2023笔记本、一体机价格汇总:最贵才8999元
每日资讯:8999元 联想小新Pro 27一体机发布:13代酷睿i9搭配Arc独显
环球微头条丨4199元起 小新14/16轻薄本2023发布:酷睿i5-1340P、高配1TB SSD
播报:三星Galaxy S23 Ultra发布 老外怒赞:安卓阵营老大
最资讯丨【LeetCode栈与队列#05】滑动窗口最大值
如何优雅的在 Word 中添加漂亮的代码?
今日热文:2023.02.15.差分
热头条丨公积金月汇缴额是什么意思
当前热讯:用微信传播盗版电影被查:向两百多人分享《流浪地球2》《满江红》链接
新资讯:日本独居雌长臂猿突然产崽!孩子的父亲竟还是自己的“爷爷”
环球最新:Lady Gaga《小丑2》剧照首曝:疯狂的小丑女登场!
环球速讯:联想小新官宣接入百度“文心一言”:可在桌面一键直达
当前通讯!新能源车企现最大跌幅背后:涨价、营销、刺激消费的“国补退坡游戏”
【环球速看料】数据类型之字符串、数据类型之列表、数据类型之字典、数据类型之布尔值、数据类型之元组、数据类型之集合、与用户交互、格式化输出、基本运算符
每日热讯!数字化开采|AIRIOT智慧矿山自动化生产解决方案
全球视讯!wagger也不好用了!API文档还得是Apipost
世界信息:Web 页面之间传递参数
Java开发工具IntelliJ IDEA 2020.2完整授权流程
观速讯丨一加显示器E 24上市:24寸IPS屏、18W PD输出
环球最新:网易代理《迷室3》《迷室:往逝》经典手游宣布停运:数据全清空
硬蹭名气?《中国式相亲2》非《中国式家长》团队作品
热议:桂格燕麦诞生于俄亥俄引网友关注 客服:产品与俄亥俄无关
环球微动态丨电量低于20%赶快充电!雅迪电动车保养攻略来了:关乎安全 车主必看
前沿热点:M值如何兑换话费
焦点观察:记录--『uni-app、小程序』蓝牙连接、读写数据全过程
全球速看:PostgreSQL重要参数解析及优化
天天新动态:openeuler加载dpdk驱动模块
【全球报资讯】(数据库系统概论|王珊)第三章关系数据库标准语言SQL-第六、七节:视图
环球热头条丨【算法训练营day44】完全背包基础 LeetCode518. 零钱兑换II LeetCode377. 组合总和IV
天天看热讯:想要模仿LPL,DRX赛后发漫画,却被Gen官方拉黑了?
焦点速读:Win11下月喜迎更新大礼包:10GB补丁 重启次数更少
【环球播资讯】员工发现老板娘偷看同事微信:火速离职
天天精选!车标成伤人凶器 日产召回超40万辆汽车
索尼降噪耳机新秀!WH-CH720N意外偷跑:升级蓝牙5.2
大国重器 首台国产HA级重型燃机下线:未来将100%零排放
焦点!字体查看小工具 -- (采用wpf开发)
【算法训练营day43】LeetCode1049. 最后一块石头的重量II LeetCode494. 目标和 LeetCode474. 一和零
每日看点!独立包装:大牌N95口罩25片9.9元到手
环球观速讯丨贾跃亭名下已无财产可执行:无车辆、不动产
【环球报资讯】苹果逐渐向OLED过渡!替换掉mini LED
世界消息!羊毛没了 Steam阿根廷区《卧龙》价格暴涨一倍
焦点讯息:一看就能装!奇瑞iCar原厂趣改套件上市:3389元起
你应该知道的微信小程序游戏技术❗️❗️
【算法题--异或操作】找出数组中唯一没有重复的那个元素
极兔一面:Dockerfile如何优化?注意:千万不要只说减少层数
环球时讯:怎样的目标管理能真正实现目标?做到这3点就对了
开心档之Java 流(Stream)、文件(File)和IO
【焦点热闻】舍利子制作方法居然也有发明专利 网友:得道高僧等级速升外挂
世界即时:跑腿师傅诉苦:男子订一束花送五个女生均被拒 还被扣款差评
微软将用UUP方式推送.NET更新:“可选更新”终于可控
钉钉iOS版喜迎更新:支持定时消息 再不怕打扰别人休息了
天天热讯:《星际争霸2》新晋中国世界冠军李培楠:别给暴雪送钱 不要买!
天天最新:CSS 盒模型和 box-sizing 属性
环球讯息:全志h616,Ubuntu,python3.9环境搭建
【全球新要闻】【关系型数据库】事务特性及事务隔离级别
软件自动化测试高频面试题
环球百事通!游戏帧数暴增84% 英特尔锐炫显卡新老驱动对比
当前动态:山东多人无视劝阻赶海 1人溺水遇难:必须小心这4点
世界即时看!价值7万的爱马仕包运输途中被烧毁!顺丰:如果是我们的问题 会进行处理
天天速看:男子给女友转账140万分手想要回:女方最终被判返还40万
每日热门:媒体曝苹果扩大在印产量障碍重重:这品控看完避雷
新资讯:时隔多年,这次我终于把动态代理的源码翻了个地儿朝天
环球速读:AI照骗恐怖如斯!美女刷屏真假难辨 网友:警惕AI网恋诈骗
【全球时快讯】万元级最香!ROG四款满血笔记本齐上阵:魔霸新锐2023首发9999元手慢无
SQL工具性能实测:居然比Navicat还快,数百万行数据导出仅51秒
当前要闻:从上至下遍历二叉树---队列的性质
全球焦点!00后男生长期把可乐当水喝:牙全坏
《巫师3》次时代版热修复上线:解决4.01版性能问题
MINI纯电Countryman谍照
世界简讯:贾跃亭再被执行2.4亿:总额超42亿!自称FF91四月交付