电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

解決android viewmodel 數據刷新異常的問題

瀏覽:128日期:2022-09-25 11:39:41

3年的wpf開發經驗,自認為對數據驅動UI開發模式的使用不是問題,但當開始研究android的mvvm模式開發時,發現兩年多的android開發經驗已經將之前的wpf開發忘得7788了。感慨一下:人老了,記憶力就這么脆弱。

談正題:adroid mvvm開發模式 之 viewmodel使用小麻煩。

viewmodel

public class MyViewModel extends ViewModel { private MutableLiveData<List<User>> mUserList; public MutableLiveData<List<User>> getUserList(){ if(mUserList == null){ return new MutableLiveData<List<User>>(); } return mUserList } public void addContacts(List<User> list){ if(mUserList.getValue() == null){ mUserList.setValue(list); }else{ mUserList.getValue().addAll(list); mUserList.setValue(mUserList.getValue()); } }}

Activity

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 注冊數據變更監聽*/ model = ViewModelProviders.of(this).get(MyViewModel.class); model.getUserList().observe(this, list -> { Log.i(TAG, 'getUserList size:' + list.size()); });}......List<User> list = new ArrayList<User>();.../*更改綁定數據*/model.addContacts(list);

以上是錯誤簡寫代碼,讓我百撕不得姐啊!

嘗試好多方法監聽中的log始終不得見,最后一次嘗試將viewmodel中的List<>改成了Integer,直接在定義類型時初始化,發現好用。思量之后發現代碼中的神來之筆額

if(mUserList == null){ return new MutableLiveData<List<User>>(); } return mUserList

兩個return 返回的不是一個對象! 無語,撕了大半天終得解!

補充知識:使用Android DataBinding時發現只能顯示一次,不能動態更新數據

本文只是記錄解決錯誤的過程,可能起不到分享的意義。

剛開始使用 dagger2 + DataBinding 的結構,很多東西也不是很清晰。

現象

一個頁面有三塊布局,我使用一個Activity搭配三個Fragment實現。

通過三個Fragment共同使用Activity的ViewModel來實現數據共享。

但是最后出現個現象就是只有剛進入頁面時,ViewModel中的數據會顯示在視圖上。

通過點擊事件更新ViewModel中 ObservableField 對象中的數據,并不會刷新視圖。

解決android viewmodel 數據刷新異常的問題

原因

千辛萬苦找到了是因為在項目中使用了 Dagger2

在給三個Fragment注入 Activity的 ViewModel 時,實際上是注入了三個 ViewModel 對象

導致每個Fragment的binding綁定的ViewModel都是不同的,自然不會有什么聯系

解決1

通過靜態代碼塊的方式實現了 ViewModel 的單例

在 module 中 @Provide修飾的方法中,返回的是單例模式的 ViewModel

解決2(失敗了)

在 Activity 的 module 中 @Provide修飾的方法上再加上個 @Singleton

報錯:AppComponent has a @Singleton

原因:@Singleton 在 AppComponent 上聲明了,@Singleton 并不是設計模式中的單例模式,而是 Dagger2 為了保證 module 提供的產品,在一個 Scope (Component)中,只有一個對象的標簽。

解決android viewmodel 數據刷新異常的問題

如上,表示了三個 Module 類在 AppComponent 這個scope中是單例的

解決3

既然外層已經使用了 @Singleton ,那么我們可以自定義一個注解來表示一個 scope

創建注解:@NewPesticideSingle (名字任意)

標注在 Module 和對應的 Component 中即可

以上這篇解決android viewmodel 數據刷新異常的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
主站蜘蛛池模板: 水质监测站_水质在线分析仪_水质自动监测系统_多参数水质在线监测仪_水质传感器-山东万象环境科技有限公司 | 温州在线网 | 沥青车辙成型机-车托式混凝土取芯机-混凝土塑料试模|鑫高仪器 | 鄂泉泵业官网|(杭州、上海、全国畅销)大流量防汛排涝泵-LW立式排污泵 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 高速混合机_锂电混合机_VC高效混合机-无锡鑫海干燥粉体设备有限公司 | 郑州宣传片拍摄-TVC广告片拍摄-微电影短视频制作-河南优柿文化传媒有限公司 | 无菌水质袋-NASCO食品无菌袋-Whirl-Pak无菌采样袋-深圳市慧普德贸易有限公司 | 展厅装修公司|企业展厅设计|展厅制作|展厅搭建—广州展厅装饰公司 | 购买舔盐、舔砖、矿物质盐压块机,鱼饵、鱼饲料压块机--请到杜甫机械 | 湖南自考_湖南自学考试 | 化妆品加工厂-化妆品加工-化妆品代加工-面膜加工-广东欧泉生化科技有限公司 | 颚式破碎机,圆锥破碎机,制砂机-新乡市德诚机电制造有限公司 | 苗木价格-苗木批发-沭阳苗木基地-沭阳花木-长之鸿园林苗木场 | 柔软云母板-硬质-水位计云母片组件-首页-武汉长丰云母绝缘材料有限公司 | 银川美容培训-美睫美甲培训-彩妆纹绣培训-新娘化妆-学化妆-宁夏倍莱妮职业技能培训学校有限公司 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 保定市泰宏机械制造厂-河北铸件厂-铸造厂-铸件加工-河北大件加工 | 炉门刀边腹板,焦化设备配件,焦化焦炉设备_沧州瑞创机械制造有限公司 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 开平机_纵剪机厂家_开平机生产厂家|诚信互赢-泰安瑞烨精工机械制造有限公司 | 软瓷_柔性面砖_软瓷砖_柔性石材_MCM软瓷厂家_湖北博悦佳软瓷 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 耐高温电缆厂家-远洋高温电缆| 拉卡拉POS机官网 - 官方直营POS机办理|在线免费领取 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 中药二氧化硫测定仪,食品二氧化硫测定仪|俊腾百科 | 优秀的临床医学知识库,临床知识库,医疗知识库,满足电子病历四级要求,免费试用 | 最新电影-好看的电视剧大全-朝夕电影网 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 油液红外光谱仪-油液监测系统-燃油嗅探仪-上海冉超光电科技有限公司 | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 臭氧老化试验箱,高低温试验箱,恒温恒湿试验箱,防水试验设备-苏州亚诺天下仪器有限公司 | 水稻烘干机,小麦烘干机,大豆烘干机,玉米烘干机,粮食烘干机_巩义市锦华粮食烘干机械制造有限公司 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 无味渗透剂,泡沫抑尘剂,烷基糖苷-威海威能化工有限公司 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | 新中天检测有限公司青岛分公司-山东|菏泽|济南|潍坊|泰安防雷检测验收 |