使用Android DataBinding时发现只能显示一次,不能动态更新数据

Android开发提升效率之DataBinding——基本使用 经过两年的使用,总结了大量的使用心得,刚好可以更加完善的介绍DataBingding,该框架让代码更加简单且可读,强烈推荐路过的你学习使用! 阅读详情

使用Android DataBinding时发现只能显示一次,不能动态更新数据

本文只是记录解决错误的过程,可能起不到分享的意义。
刚开始使用 dagger2 + DataBinding 的结构,很多东西也不是很清晰。

现象

  • 一个页面有三块布局,我使用一个Activity搭配三个Fragment实现。
  • 通过三个Fragment共同使用Activity的ViewModel来实现数据共享。
  • 但是最后出现个现象就是只有刚进入页面时,ViewModel中的数据会显示在视图上。
  • 通过点击事件更新ViewModel中 ObservableField 对象中的数据,并不会刷新视图。

CIIqSO.jpg

原因

  • 千辛万苦找到了是因为在项目中使用了 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)中,只有一个对象的标签。

CIIXOH.jpg

  • 如上,表示了三个 Module 类在 AppComponent 这个scope中是单例的

解决3

  • 既然外层已经使用了 @Singleton ,那么我们可以自定义一个注解来表示一个 scope
  • 创建注解:@NewPesticideSingle (名字任意)
  • 标注在 Module 和对应的 Component 中即可
Android 安卓DataBinding(十)·include中使用 在include中使用首先写出layout布局:include_layout.xml 阅读详情

相关推荐

安卓入门十五 常用功能模块一DataBinding

在 ViewModel 中使用了 LiveData 后 , 必须调用 LiveData#observe 函数 为 LiveData 设置 androidx.lifecycle.Observer 监听器 , 如果 监听到了 LiveData 数据变化 , 直接 回调 监听器的 androidx.lifecycle.Observer#onChanged 函数 , 在该回调函数中执行 更新视图 操作;为 Button 组件设置点击事件时 , 如果要 调用配置的 ViewModel 对象的函数 , 需要使用。

weixin_52735932的博客 1700

DataBinding进行数据绑定的时候,更新数据以后,页面内容不刷新,八成是没有触发ui刷新

初入databinding时,遇到了这么一个问题,使用kotlin的data class写数据类,实现双向绑定的时候,发生了数据更新成功,但是页面的TextView没有刷新显示,研究了一下是页面没有更新,name更新有两种方案。:每次赋值新数据时执行一下invalidateAll(),这种方法不推荐,因为每次更新都调用太麻烦了吧,而且这个方法是对所有内容进行一个更新,不是很美妙。

Spy003的博客 2189

Android之DataBinding的使用

一、DataBinding介绍 2015年谷歌I/O大会上介绍了一个框架DataBinding,DataBinding是一个数据绑定框架,以前我们在Activity里写很多的findViewById,很多人不想写这个于是用了一些注解框架,可是注解框架无论性能多好,效率总是要低于findViewById的,现在如果我们使用DataBinding,就可以抛弃findViewById。DataBindi

qq_36159785的博客 3103

让UI能够自动刷新Viewmodel里数据的改动

Viewmodel 和Databinding 时很好用的工具,尤其是在Fragments之间共享数据。 #mermaid-svg-sG8UYLUCyUUGMIDg .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-sG8UYLUCyUUGMIDg .label text{fill:#333}#mermaid-svg

u014694850的博客 1803

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

qq_38120851的博客 4043

SpringBoot使用mybatis-plus的自动代码生成器

一.SpringBoot使用mybatis-plus+自动代码生成 使用mybatis-plus可以自动帮我们生成通用的 controller,service,dao,mapper 二.加入依赖 <!-- MP 核心库 --> <dependency> <groupId>com.baomidou</groupId> <artif...

农民娃儿的博客 2263

android 组合控件 databing,Jetpack组件:ViewModel,LiveData,DataBinding简单实践,附Demo...

1.基本概念1.1组件介绍ViewModel: 存放和管理UI界面就是View中的数据LiveData: 给数据添加一个观察者,当数据发生变动时,自动刷新UI界面上的数据DataBinding: 管理UI界面的控件,就不需要要findViewById之类,同时可以将数据和一定操作回绑到view中通过上面这三个组件就能够使activity或fragment只需要专注业务逻辑本身1.2Demo介绍1....

weixin_39775577的博客 776

Windows 11下ROS2 Humble与PyCharm无缝集成实战(避坑指南+完整配置流程)

本文详细介绍了在Windows 11系统下如何实现ROS2 Humble与PyCharm的无缝集成,包括环境准备、ROS2 Humble安装、PyCharm配置以及C++与Qt5混合开发的实战技巧。通过避坑指南和完整配置流程,帮助开发者高效搭建稳定的机器人开发环境,特别适合Windows平台的ROS2开发者。

weixin_28710999的博客 366

Android问题笔记七:Adapter更新数据不刷新的问题

使用 Listview 的时候,给 adapter 的数据源 List 添加了新的数据,然后调用 adapter.notifyDataSetChanged(),发现 listview 并没有显示出新增的数据,但是遍历输出 List 中的元素,发现新增数据已经被添加到 List 中了,数据既然已经被添加到数据源中了,为什么 Listview 没有更新呢?

空名先生 3824

DeepSeek+知网研学:三步搞定文献矩阵与对比分析(实战指南)

本文提供了一套高效实用的文献管理分析实战指南,详细介绍了如何结合DeepSeek大模型与知网研学平台,通过三个核心步骤快速完成文献梳理。该方法能自动提炼文献核心要素、生成结构化对比矩阵,并辅助发现研究空白,显著提升学术研究者的文献分析效率与深度。

weixin_29061509的博客 491

Windows应急响应实战:灰鸽子木马检测与清除全流程解析

远程控制木马(RAT)是一种基于客户端/服务器(C/S)架构的恶意软件,攻击者通过它能够远程操控受害主机,实现屏幕监控、文件窃取、键盘记录等操作,对个人隐私与企业数据安全构成严重威胁。其技术原理通常涉及进程注入、网络通信、持久化机制等核心环节,在应急响应中具有极高的分析价值。掌握此类木马的检测与清除方法,是Windows系统安全防护与事件处置的基本功。本文以经典的灰鸽子木马为例,结合进程分析、网络排查、注册表检查等实战技术,系统讲解从行为识别、痕迹取证到彻底清除的完整操作流程,并涵盖Rootkit对抗、无文

weixin_30521161的博客 414

【Android】android设置了数据绑定databinding,view不随着model变化而变化

今天在将项目从findViewById转到MVVM的databinding时,发现有的view绑定了数据,但是数据变了,view并不会跟着改变 现场还原 将用户信息的头像uri绑定到ImageView,理论上来说,userInfoAll.UserInfo.avatar发生了改变,就会调用load方法重新设置头像,但是并没有发生 <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http.

qq_40313347的博客 3676

从桨叶设计到电机匹配:手把手教你调出无人机最佳动力组合

本文系统介绍了无人机动力系统的核心匹配原则,重点解析了如何通过测试与数据分析,优化螺旋桨与电机的组合,从而显著提升系统力效与续航。文章提供了从参数解读、实战测试到深度调优的完整指南,帮助开发者解决电机过热、推力不足等常见问题,实现无人机性能最大化。

weixin_29305313的博客 235

Android 安卓DataBinding(六)·双向绑定(2)

上一期讲到 两种集合和的使用方法,但是以上讲到的三种单向绑定的方法,却只能根据数据去刷新UI,但是考虑这种情况,如果UI刷新数据跟着刷新呢?这就需要用到双向绑定了!双向绑定现在要想到,在哪那些方面需要双向绑定,哪那些方面不需要双向绑定,生存还是死亡,这是个问题。在以上三个单向绑定案例中,貌似双向绑定没多大用处,下面举例一种情况,在输入账号和密码的时候,UI更新同时数据也要更新,这就用到双向绑定,总的来说,双向绑定使用还是不算多的,双向绑定是安卓MVVM架构的基础。

2401_84149256的博客 1146

C#企业级工作流管理:从优化到重构的实战指南——代码深度解析与性能调优策略

本文通过Workflow Core与Elsa引擎实现企业审批流程优化,将处理时间从72小时缩短至2小时,效率提升200%。文章包含12个代码示例,涵盖流程梳理、引擎选型(对比Workflow Core与Elsa特性)、模块化重构(策略模式应用)及异常处理机制。关键实现包括:可视化流程建模、Serilog性能监控、Elsa集成配置、策略模式消除重复代码,以及补偿事务设计。最终方案支持高并发,通过数据库连接池优化性能,为企业级工作流系统提供完整技术方案。

墨夶的博客 896

YOLO26改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣ 什么!不知道如何改进模型⁉️ 本专栏已更新260多种不同的改进方法,所使用并改进的每一个模块均包含详细的模块分析、原理讲解、个人总结、多种改进方式以及完整的修改流程,所有改进100%可直接运行,性价比极高。2️⃣ 找不到合适的模块⁉️ 所有改进点均为近三年顶会,顶刊提出的先进算法,将其融入到中,并进行二次创新,新颖度高,创新度高,能够适应不同的任务场景。3️⃣ 不确定自己改进的步骤、结果是否正确⁉️ 订阅专栏即可进群享受模型训练、模型改进、论文写作、投稿选刊,从入门到论文的各种答疑内容,非常适合新手

Limiiiing的博客 6334

Android 安卓DataBinding(六)·双向绑定

文章目录前景回顾双向绑定 前景回顾 Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable Android 安卓DataBinding(四)·单向绑定 ObservableField Android 安卓DataBinding(五)·单向绑定 Obse...

两行代码 踏踏实实de工作 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android基础入门:dataBinding的简单使用

那么如何在data标签中定义数据呢?通过标签,定义数据的名字name和类型type,这个类型可以是java中的所有基本类型然后到布局中,用插值表达式将数据替代掉不过现在什么也不会显示,因为这两个变量只定义了,没有赋值看到这,我们也明白data标签的好处之一了,数据的定义都在data标签中,而constraint中就只管布局,通过插值表达式来绑定数据,不会出现数据。那么data标签里的数据又如何初始化赋值呢?这部分逻辑操作就交给Activity了。

2401_84537603的博客 2913

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android DataBinding数据集合动态更新与UI刷新(20)

在Android开发中,数据集合的展示与更新是常见需求,而DataBinding作为一种强大的数据绑定框架,能够有效简化数据与UI的交互。理解DataBinding对数据集合的动态更新与UI刷新机制,有助于开发者构建高效、响应式的应用程序。

Android开发领域创作者 840

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【Android】DataBinding 最全使用解析

是谷歌官方在2015谷歌I/O大会发布的一个数据绑定框架,是MVVM模式在 Android 上的一种实现,用于降低布局和逻辑的耦合性,使代码逻辑更加清晰。能够省去我们一直以来的步骤,大量减少 Activity 内的代码,也是中非常重要的一部分。

lucashu的博客 5407

『Android基础入门』dataBinding的简单使用

dataBinding是实现 view 和 data 绑定的工具,把数据映射到 view 的 xml中,可以在 xml 布局文件中实现 view 的赋值,方法调用。使用 DataBinding 后,我们不用再写 findViewById,不用再获取控件对象,不用再设置监听,可以节省我们 activity 中的很多获取控件,赋值,添加监听所需要的代码。可以说MVP + DataBinding就是MVVC(关于MVC,MVP,MVVC的区别可看往期文章)选中布局文件的第一行,按就会弹出提示,默认选中改造好的的新

一个专注于客户端开发的技术er,不定期更新Android,Flutter,HormonyOS等方向的使用心得和感悟 2542

Android 安卓DataBinding(五)·单向绑定 ObservableCollection(集合使用)

文章目录前景回顾单向绑定ObservableMapObservableMap 运行效果ObservableListObservableList 运行效果更新UI更新UI运行效果 前景回顾 Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable Andr...

两行代码 踏踏实实de工作 8974

Android 安卓DataBinding详解(超详细)

由于这篇文章写来来会很长很长,为避免文章内容混乱,便于理清思路考虑,所以列出了目录。 Android 安卓DataBinding(时刻更新、维护一下文章) Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable Android 安卓DataBindin...

两行代码 踏踏实实de工作 8465

Android DataBinding的使用

本文是用来简记DataBinding使用前的配置及一些情况下的使用。默认情况下,生成的Binding类的名称是布局文件去除下划线、(),所有单词首字母大写(被下划线分割的视为一个单词)。然后再后面加上Binding。被放置在build\generated\source\apt\debug\项目包名\databinding包下。自定义Binding类名称:...</data>更换生成的Binding类所在的包:直接在刚刚的指定的名称前指定包名就可以了。...</data>

hcgeng的专栏 2090
上一篇: Android EditText获取焦点后只显示光标不弹出软键盘
下一篇: 正则表达式验证手机号码(2018年06月19日)
george_zyf
博客等级 码龄11年 132粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值