首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Jetpack】ViewModel + LiveData + DataBinding 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

DataBinding 结合使用时 , 在 DataBinding 布局中设置的就是该 视图模型 类对象 ; 该 ViewModel 类中 , 还 使用了 LiveData , 可以实时监听数据改变...的 , 是 对 ViewModel 数据维护的一个补充 ; 在 Activity 中使用代码可以将 ViewModel 初始数据 设置给 视图组件 , 进行 初始状态显示 ; 如果 在运行过程中 ,..., 可以将 运行过程中 ViewModel 中的 Model 模型数据改变 通知 视图 View , 令视图组件显示最新的数据内容 ; 在 ViewModel 中使用了 LiveData 后 , 必须调用...成员 , 这是 LiveData 实现 , 用于在 运行过程中 , 一旦 ViewModel 数据发生改变 , 就 通知 View 视图组件 , 更新数据显示 ; LiveData 生效需要 为 MutableLiveData..." Convert to data binding layout " 选项 ; 然后 , 在 DataBinding 中配置 ViewModel 视图模型对象 ; 在 TextView 中显示文本时

1.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    区域设置更改和 AndroidViewModel 反面模式

    antipattern 原文作者:Jose Alcérreca 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:solerji TL;DR:从视图模型中公开资源 ID 以避免显示废弃的数据...当用户更改其区域设置时,活动将重新被创建,但不创建 ViewModel 对象。 AndroidViewModel 是已知应用程序上下文的 ViewModel 的子类。...这将导致我们的应用程序显示废弃的数据,因此只能部分本地化。 正如 Sergey 在评论中指出的那样 comments,推荐的方法是公开要加载的资源的 ID ,并在视图中这样做。...// 显示资源ID public class MyViewModel extends ViewModel { public final MutableLiveData statusLabel...我们也把资源转移到 数据绑定布局。

    12510

    区域设置更改和 AndroidViewModel 反面模式

    antipattern 原文作者:Jose Alcérreca 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:solerji TL;DR:从视图模型中公开资源 ID 以避免显示废弃的数据...在 ViewModel 中,如果要公开来自资源(字符串、可绘制文件、颜色……)的数据,则必须着重考虑 ViewModel 对象而忽视配置更改,例如区域设置更改。...当用户更改其区域设置时,活动将重新被创建,但不创建 ViewModel 对象。 ? AndroidViewModel 是已知应用程序上下文的 ViewModel 的子类。...这将导致我们的应用程序显示废弃的数据,因此只能部分本地化。 正如 Sergey 在评论中指出的那样 comments,推荐的方法是公开要加载的资源的 ID ,并在视图中这样做。...// 显示资源ID public class MyViewModel extends ViewModel { public final MutableLiveData statusLabel

    1.2K60

    Android程序员该如何去手写事件通信方案LiveDataBus

    3.当Activity停止时不会引起崩溃 这是因为组件处于非激活状态时,不会收到LiveData中数据变化的通知。...5.组件和数据相关的内容能实时更新 组件在前台的时候能够实时收到数据改变的通知,这是可以理解的。...当组件从后台到前台来时,LiveData能够将最新的数据通知组件,这两点就保证了组件中和数据相关的内容能够实时更新。...6.针对configuration change时,不需要额外的处理来保存数据 我们知道,当你把数据存储在组件中时,当configuration change(比如语言、屏幕方向变化)时,组件会被recreate...使用者不用显示调用反注册方法。 由于LiveData具有生命周期感知能力,所以LiveDataBus只需要调用注册回调方法,而不需要显示的调用反注册方法。

    1.4K10

    Jetpack:LiveData

    LiveData是一个可被观察的数据持有者类。....LiveData遵循观察者模式.当生命周期状态改变时,LiveData会向Observer发出通知去更新UI...(2)没有内存泄漏.Observer会绑定具有生命周期的对象,并在这个绑定的对象被销毁后自行清理. (3)不需要手动处理生命周期.UI组件只需要去观察相关数据,不需要手动去停止或恢复观察。...LiveData会进行自动管理这些事情,因为在观察时,它会感知到相应组件的生命周期变化。 (4)始终保持最新的数据.如果一个对象的生命周期变到非活跃状态,它将在再次变为活跃状态时接收最新的数据。...//Log里面会显示hhhh } }); 3.源码解析 public void observe(@NonNull LifecycleOwner owner, @NonNull

    60920

    Android Jetpack系列 之LiveData

    LiveData 与普通可观察类不同的是LiveData具有生命周期感应能力,比如我们在页面中进行网络请求结束后,需要将数据显示在UI上,如果此时页面被销毁就会有空指针等异常,我们还需要在页面销毁的时候单独处理...这里我们新增需求将计数的数字显示在TextView中。...所以我们就要做到当计数的数字发生改变时,通知TextView便于TextView重新显示,如果矬一点,可能会想到将View传递到ViewModel中,让ViewModel持有View的引用,这种方式确实可以实现需求...ok,这样的话 我们就使用LiveData实现上面的需求了,但是有没有感觉有什么问题呢,问题就是这个mCount可变类型的数据暴露给了外部,导致我们在ViewModel外也是可以赋值的,这样违反了ViewModel...程序达到了我们预期的结果,但是我们这里知道,对于学生这个属性来说,学号和姓名是不可变的,只有分数是可变的,所以这个时候我们可以使用map函数只对分数进行观察,改写ViewModel中的代码如下所示: public

    1.1K20

    安卓软件开发:用JetpackCompose实现NimReplyAppLogic中篇

    二、数据层的实现2.1 Repository 模式为了管理电子邮件数据,使用 Repository 模式统一处理数据的获取和更新。这样可以轻松扩展数据源(例如从网络或数据库获取数据)。...三、实现筛选功能:实时更新电子邮件列表为了实现邮件的筛选功能,使用 LaunchedEffect 和 remember 跟踪用户的搜索输入,动态更新邮件列表。...四、实现邮件详情和状态管理4.1 电子邮件详情页面使用 ViewModel 实现邮件的详情展示。当用户点击邮件时,应用会展示该邮件的详细内容以及回复的线程。...5.1 使用 remember 和 mutableStateOf我们使用 remember 和 mutableStateOf 管理邮件筛选输入和筛选结果的状态:@Composablefun EmailFilterScreen...onValueChange = { query = it }, label = { Text("搜索邮件...") } ) // 显示筛选结果

    13820

    掌握 Android Compose:从基础到性能优化全面指南

    2.3 使用State和MutableState处理状态 State 和 MutableState 提供了一种在 Compose 中管理可变数据的方式,使得数据的任何更改都能实时反映在 UI 上。...使用 remember 可以避免这种情况,它会记住给定的值,并在重组时保持不变,除非其依赖的状态发生变化。 作用: 保持状态: 在 Composable 函数的多次重组中保持数据状态不变。...复杂的布局会增加渲染时间,尤其是在滚动时。如果列表项布局复杂,考虑将其拆分为更小的、更简单的组件,或者使用 remember 和 derivedStateOf 来缓存复杂的计算结果。...预加载和分页加载:对于数据量大的列表,考虑实现预加载或分页加载机制,以减少一次性加载的数据量,从而减轻内存压力并提升响应速度。这可以通过监听滚动位置并在接近列表底部时加载更多数据来实现。...5.3 使用缓存机制 对于复杂的数据,使用 remember 来缓存计算结果,避免每次重组时重新计算: @Composable fun ExpensiveView(data: Data) { val

    60020

    Android  JetPack~ LiveData (一)   介绍与使用

    一般情况下LiveData都是搭配这ViewModel使用,这里先介绍一下LiveData,再结合ViewModel使用 Android数据绑定技术一,企业级开发 Android数据绑定技术二,企业级开发...的使用 5、MutableLiveData的使用 6、LiveData和MutableLiveData的可变与不可变 7、其他方法 1、什么是LiveData LiveData是一个观察者模式的数据实体类...从非活跃状态变为活跃状态时,回调方法会立即接收到最新的数据 当设备切横竖屏,会重建Activity生命周期,它也会立即接收最新的可用数据。...3.如果同时调用 .postValue()和.setValue(),结果是post的值覆盖set值。...super T> observer)   设置此LiveData数据当前activity或者Fragment的观察者,会给此activity或者Fragment在前台时回调数据。

    1.6K20

    MVI 架构

    泄露的谷歌内部文件显示,该公司要求其超过15万名员工在12月3日之前将疫苗接种状态上传到其内部系统上,无论他们是否计划复岗。...MVI架构实战 需要重点指出的是,标题中说MVI架构是MVVM的进阶版是指MVI在MVVM非常相似,并在其基础上做了一定的改良,并不是说MVI架构一定比MVVM适合你的项目。...要了解MVI架构,我们首先来了解下MVVM架构有什么不足,相信使用MVVM架构的同学都有如下经验,为了保证数据流的单向流动,LiveData向外暴露时需要转化成immutable的,这需要添加不少模板代码并且容易遗忘...= MutableLiveData() val pageState: LiveData = _pageState private val _state1: MutableLiveData = MutableLiveData...,其实并没有使用MVVM双向绑定的特性,而是单一数据源 当页面复杂时,需要定义很多State,并且需要定义可变与不可变两种,状态会以双倍的速度膨胀,模板代码较多且容易遗忘 View与ViewModel

    5410

    事件总线方案实践

    06.简单的实现案例代码 07.遇到的问题和分析思路 08.使用反射解决遇到问题 09.使用postValue的bug 10.如何发送延迟事件消息 11.如何发送轮训延迟事件 12.避免类型转换异常问题...使用者不用显示调用反注册方法。LiveData具有生命周期感知能力,所以LiveDataBus只需要调用注册回调方法,而不需要显示的调用反注册方法。...tvText.setText(newText); } }); ### 07.遇到的问题和分析思路 - 遇到的问题: - 1.LiveData 一时使用一时爽...mPendingData = NOT_SET; } //noinspection unchecked setValue((T) newValue); } }; 08.使用反射解决遇到问题...postValue的bug 9.1 模拟通过发送多个postValue消息出现丢失问题 首先看看MutableLiveData源代码,如下所示,这里重点展示测试数据案例public void postValue

    1.9K30

    Android从零开始搭建MVVM架构(4)——LiveData

    比如当我们使用 Retrofit+Rxjava处理接口回调数据时,需要考虑activity 或 fragment 生命周期,以解决 onStop 或 onDestory之后回调数据的问题。...这些UI控制器负责显示数据而不是保存数据状态。 将LiveData实例与特定Activity或Fragment实例分离,这将使得LiveData对象在配置更改后仍然存活。...当更新数据库时,会生成所有必要的代码来更新LiveData对象。 生成的代码在需要时在后台线程上异步运行查询。 这种模式对于保持用户界面中显示的数据与存储在数据库中的数据同步很有用。...LiveData对象中的值,并向下传递结果。...另外,如果UI组件被重新创建,它会触发对repository.getPostCode()方法的另一个调用,而不是使用前一个调用的结果。

    2.4K30

    Kotlin开发框架建议入门实践

    开始之前推荐一篇实用的文章:uniapp 实现网络测速小功能 ,这篇网络测速文章详实且实用,提供了前端与后台的实现方法,值得一读,强烈推荐,讲解了网络测速的基本思路、测速界面设计与交互、代码实现:速度显示圆环等内容...LiveData是一个可观察的数据持有者,它能够感知生命周期,并在数据发生变化时通知相关的UI组件。...以下是一个使用Room进行数据库操作的简单示例:@Entity(tableName = "users")data class User( @PrimaryKey val id: Int, @...通过使用LiveData和ViewModel,开发者可以轻松地将数据与UI进行绑定,并在数据发生变化时自动更新UI。...通过Kotlin Multiplatform Mobile(KMM),开发者可以在iOS和Android应用程序之间共享通用代码,并仅在必要时编写特定于平台的代码。

    25320

    MVVM 进阶版:MVI 架构了解一下~

    MVI架构实战 需要重点指出的是,标题中说MVI架构是MVVM的进阶版是指MVI在MVVM非常相似,并在其基础上做了一定的改良,并不是说MVI架构一定比MVVM适合你的项目undefined各位同学可以在分析比较各个架构后...要了解MVI架构,我们首先来了解下MVVM架构有什么不足 相信使用MVVM架构的同学都有如下经验,为了保证数据流的单向流动,LiveData向外暴露时需要转化成immutable的,这需要添加不少模板代码并且容易遗忘...val _state2: MutableLiveData = MutableLiveData() val state2: LiveData = _state2...这其实就是我通过MVVM架构写比较复杂页面时最难受的点。...,但由于很多人(比如我)并不喜欢使用DataBindg,其实并没有使用MVVM双向绑定的特性,而是单一数据源 当页面复杂时,需要定义很多State,并且需要定义可变与不可变两种,状态会以双倍的速度膨胀,

    2.1K20

    开发以太坊安卓钱包系列3 - 资产信息展示

    ViewModel 和 LiveData ViewModel 会关注UI生命周期来存储和管理数据,在Activity发生变化(锁屏开屏、旋转)时,ViewModel 会自动保留之前的数据并给新的Activity...或Fragment使用,当界面被系统销毁时,ViewModel也会进行资源清理,避免内存泄漏。...先对问题做一个拆分,把数据拆分为4个部分: •显示当前选中的账号•显示当前账号 ETH 余额•显示当前账号下 Token 数量•显示对应的法币金额。...显示当前账号 可以分为两个步骤: •从数据库中读取账号;•界面显示账号 TokensViewModel中定义了一个MutableLiveData defaultWallet ,从数据库中读取账号会保存在...注解: 登链钱包[4] 里大量使用的这个方式,通过一个LiveData 做数据桥接。

    1.3K30

    【Jetpack】LiveData 架构组件 ( LiveData 简介 | LiveData 使用方法 | ViewModel + LiveData 示例 )

    视图 View ; 二、LiveData 使用方法 ---- 首先 , 在 ViewModel 视图模型 中定义 LiveData 数据 , 如 MutableLiveData , class MyViewModel...+ LiveData 代码 自定义 ViewModel 子类继承 ViewModel , 在 ViewModel 中 , 定义 LiveData 类型的数据 , 此处选择使用 MutableLiveData..., LiveData 设置了 Observer 监听 , 数据改变时回调 Observer#onChanged 函数更新 UI 显示 ; 执行时切换屏幕方向 , 不影响数据累加显示 ; 四、ViewModel...MutableLiveData 数据类型 , 维护一个 Int 类型的数据 , 当该 Int 值发生改变时 , 会触发 LiveData 设置的 Observer 监听器 ; package...ViewModel 中的 LiveData 数据 , 当该 LiveData 数据发生改变时 , 对应 TextView 显示也随之更新 ; package kim.hsl.livedatademo

    1.3K20
    领券