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

在LiveData<List>上订阅的recyclerView中不会显示LiveData<List<Obj>>中的更改

在LiveData<List>上订阅的RecyclerView中不会显示LiveData<List<Obj>>中的更改的原因是LiveData的数据更新机制。LiveData是一种可观察的数据持有者,它可以感知生命周期,并在数据发生变化时通知观察者。但是,LiveData的数据更新是基于引用的,而不是基于内容的。

当LiveData<List<Obj>>中的数据发生更改时,LiveData会通知观察者数据发生了变化。然而,由于LiveData<List>和LiveData<List<Obj>>是不同的数据类型,它们的引用不同,因此LiveData<List>的观察者不会收到LiveData<List<Obj>>的更新通知。

为了解决这个问题,可以使用Transformations类中的map()方法将LiveData<List<Obj>>转换为LiveData<List>,然后在RecyclerView中订阅转换后的LiveData<List>。这样,当LiveData<List<Obj>>中的数据发生更改时,转换后的LiveData<List>也会相应地更新,从而在RecyclerView中显示最新的数据。

以下是一个示例代码:

代码语言:txt
复制
LiveData<List<Obj>> liveDataListObj = ...; // LiveData<List<Obj>>对象

LiveData<List> liveDataList = Transformations.map(liveDataListObj, listObj -> {
    List list = new ArrayList();
    list.addAll(listObj);
    return list;
});

liveDataList.observe(this, list -> {
    // 在这里更新RecyclerView的数据
});

在上述示例中,我们使用Transformations.map()方法将LiveData<List<Obj>>转换为LiveData<List>,并在转换后的LiveData<List>上进行观察。当LiveData<List<Obj>>中的数据发生更改时,转换后的LiveData<List>也会相应地更新,从而触发RecyclerView的数据更新操作。

对于腾讯云相关产品,推荐使用云数据库 TencentDB for MySQL 来存储和管理数据。TencentDB for MySQL 是一种高性能、可扩展的云数据库服务,适用于各种规模的应用程序和业务场景。您可以通过以下链接了解更多关于腾讯云数据库的信息:TencentDB for MySQL

希望以上信息能对您有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

优化 SwiftUI List 显示大数据集响应效率

也就是当显示主界面菜单时,列表视图已经完成了实例创建(可以通过 ListEachRowHasID 构造函数添加打印命令得以证明),因此也不应是实例化列表视图导致延迟。... SwiftUI 视图生命周期研究[3] 一文,我对 List 如何对子视图显示进行优化做了一定介绍。...当仅通过 ForEach 来指定显示标识时,List 会对这些视图显示进行优化,仅在需要显示时才会对其进行实例化。...使用了 id 修饰符相当于将这些视图从 ForEach 拆分出来,因此丧失了优化条件。 总之,当前在数据量较大情况下,应避免 List 对 ForEach 子视图使用 id 修饰符。...新问题 细心朋友应该可以注意到,运行解决方案一代码后,第一次点击 bottom 按钮时,大概率会出现延迟情况(并不会立即开始滚动)。

9.1K20

Android Jetpack - LiveData

,而已注册但处于非活跃状态观察者不会被更新 我们可以实现了 LifecycleOwner 接口对象中注册 observer,这种关联允许 observer 与之相关 Lifecycle 对象处于...每次应用程序数据更改时,你观察者都可以每次更改时更新 UI,而不是更新 UI 没有内存泄露 观察者绑定到 Lifecycle 对象,并在其相关生命周期被破坏后自行清理 不会因为活动停止而崩溃 如果观察者生命周期处于非活动状态...,例如在后端堆栈活动情况下,则它不会收到任何 LiveData 事件 不再需要手动处理生命周期 UI 组件只是观察相关数据,不会停止或恢复观察。...,此模式对于使 UI 显示数据与存储在数据库数据保持同步非常有用。...具体可以参考 Android Jetpack - Room 一文所提供代码示例 转换 LiveData 您可能希望LiveData 对象分派给观察者之前更改存储 LiveData 对象值,

2K30

Android Architecture Paging Library详解 | Google IO大会上最新发布

/widget/CursorAdapter.html)使得获取数据库查询结果更加容易映射到ListView项目中,但是它查询操作是UI线程运行,并且以低效方式使用Cursor。...>>>> PagedListAdapter PagedListAdapter继承于RecycleView.Adapter,用来RecycleView显示PagedList 数据。...如上图所示,Paging加载数据是在后台线程进行,加载完成后主线程显示。...可以看出,整个过程Paging内部实现了线程切换,数据预加载,所有联动都是Paging,使用者只用关心加载数据具体实现。...,并且在用户体验,Paging Library逐步从数据源加载信息,从而不会耗费过多设备资源或是等待太长时间。

1.5K20

“终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!

MVVM MVVMAndroid开发是如何实现呢?接着看~ 到这里你会发现,所谓架构模式本质理解很简单。...3.2 实施 我们来举个完整例子 - 页面显示用户信息列表,来说明 Jetpack MVVM 具体实施。...应用其他组件可以使用此存储器监控对象更改,而无需它们之间创建明确且严格依赖路径。...将 UserListViewModel 字段类型更改为 MutableLiveData。现在,更新数据时,系统会通知 UserListActivity。...例如 UserRepository会将网络服务响应保存在数据库。这样一来,对数据库更改将触发对活跃 LiveData 对象回调。数据库会充当单一可信来源。 保留尽可能多相关数据和最新数据。

1.9K10

Android消息总线演进之路:用LiveDataBus替代RxBus、EventBus

当观察者生命周期处于STARTED或RESUMED状态时,LiveData会通知观察者数据变化;观察者处于其他状态时,即使LiveData数据变化了,也不会通知。...使用者不用显示调用反注册方法。 由于LiveData具有生命周期感知能力,所以LiveDataBus只需要调用注册回调方法,而不需要显示调用反注册方法。...这个时候订阅者就会收到消息,并作相应处理,非常简单。 问题出现 对于LiveDataBus第一版实现,我们发现,使用这个LiveDataBus过程订阅者会收到订阅之前发布消息。...LiveDatadispatchingValue,又会调用LiveDataconsiderNotify方法。 ?...LiveDataconsiderNotify方法,红框逻辑是关键,如果ObserverWrappermLastVersion小于LiveDatamVersion,就会去回调mObserver

2.3K30

一篇掌握LiveData transformations

使用Android架构组件时,LiveData是一个很好工具。我知道如何使用Transformations类之前,我一直滥用LiveData,并产生了大量烂代码。...switchMap转换可能有点棘手,所以让我们从一个简单例子开始。我们想为Player实现一个基本搜索功能。每次搜索文本发生变化时,我们都想更新搜索结果。下面的代码显示了它是如何工作。...(it) } distinctUntilChanged 对LiveData进行过滤,除非数值发生了变化,否则不会被检索出来。...对于我使用情况,它主要与RecyclerView/适配器更新有关。...方案4 由于MediatorLiveData是一个LiveData实例,我们可以设置值(像上面的例子)或调用postValue(如果由于某种原因,你发射值时不在主线程)。

1.3K20

“终于懂了“系列:Jetpack AAC完整解析(五)DataBinding 重新认知!

如果是把逻辑写在xml,确实如此:xml是不能调试、职责确实是混乱了。 但,这就是 DataBinding 本质了吗?...而 我们 一篇 MVVM 是使用 LiveData,实现数据驱动,它包裹 User 是没有继承BaseObservable, 要继承嘛?不用!...并且ViewModel 使用 Transformations.switchMap 把 生命周期信息 传递到 Repository LiveData 。...本质 " 终态数据 绑定到 View " ,而不是 ” xml写逻辑 ”;自定义属性 BindingAdapter;结合 LiveData使用。...可见DataBinding Jetpack MVVM 架构 还是 有很大优势。 最后补充说明得了 Jetpack MVVM 架构 使用注意事项和原则,实际项目使用 应该会很有体会。

1.4K10

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

LiveData允许UI控制器Observer订阅更新。 当LiveData对象所保存数据发生变化时,UI会在响应自动更新。...创建LiveData对象 LiveData是一个包装器,可用于任何数据,包括实现Collections对象,如List。...这些UI控制器负责显示数据而不是保存数据状态。 将LiveData实例与特定Activity或Fragment实例分离,这将使得LiveData对象配置更改后仍然存活。...当更新数据库时,会生成所有必要代码来更新LiveData对象。 生成代码需要时在后台线程异步运行查询。 这种模式对于保持用户界面显示数据与存储在数据库数据同步很有用。...由于没有Observer监听,所以没有理由继续保持与StockManager服务连接。 setValue(T)方法更新LiveData实例值,并通知活动观察者有关更改

2.2K30

JetPack--Room数据库

需要满足:定义类是一个继承RoomDatabase抽象类,注解定义包含实体类列表,包含一个没有参数抽象方法并返回Dao对象 一、Room上手 首先添加依赖: implementation...使用 @Entity注解 ,还需要一个构造方法,Room会根据这个构造将表里数据转化为实体类,对于其他我们代码里使用构造方法,可以使用@Ignore注解表示Room将忽略它,属性也可以使用这个注解...,表示这个属性将不会生成数据库字段 使用@PrimaryKey注解指定主键并且是自增长 属性还可以指定在数据库字段等,使用@ColumnInfo注解: package com.aruba.room...二、ViewModel+LiveData+Room Room支持返回LiveData类型,结合ViewModel、DataBinding,就可以改造成一个非常棒MVVM架构 package com.aruba.room...我们使用@Database注解时exportSchema指定为true,那么每次升级时,都会导出一个Schema文件,里面包含数据库创建信息,方便排查问题 同时我们也需要在gradle里指定下导出文件夹位置

1.5K20

Android技术栈(四)Android Jetpack MVVM 完全实践

DataBinding打造通用RecyclerView.Adapter 下面进行一个小小实战吧,我们可以站在巨人肩膀造轮子....,该状态与LifecycleOwner某些回调事件相关,只会出现以下几种状态,Java以一个枚举类抽象出来定义Lifecycle类。...4 LiveData LiveData是对Android组件生命周期感知粘性事件,也就是说,LiveData持有数据时,你去订阅它就能收到他最后一次接收到数据.实战,我们能用到LiveData...LiveData可以有初始值,也可以没有,如果在没有初始值得情况下被订阅,则订阅不会收到任何值. 4.3 MediatorLiveData MediatorLiveData继承自MutableLiveData...View层正常行为应该是观察某个ViewModel,间接获取该ViewModel从Model层获取并处理过能在View层直接显示数据.

3.8K01

Android Paging库使用详解(小结)

Android分页包能够更轻易地RecyclerView里面缓慢且优雅地加载数据. 许多应用从数据源消耗数据, 数据源里面有大量数据, 但是一次却只展示一小部分....用这种方式, 无论任何时候数据库数据插入或者修改, 这些改变会自动地负责展示这些数据RecyclerView展示出来....这些实例也提供了应用引用RecyclerView适配器....PagedList实例既可以使用LiveData<PagedList 也可以使用Observable<List 对UI传递数据更新, 同时最小化了加载时间和内存使用....在这些情况下, 把adapter数据类型转化为LiveData<PagedList , 之后尝试使用将这些数据项UI填充起来之前, 将这个列表ArrayAdapter对象包裹起来.

2K30

LiveData详细分析

不会发生内存泄露 观察者被绑定到组件生命周期,当被绑定组件销毁(onDestroy)时,观察者会立刻自动清理自身数据。...如何去更新那个文本数据呢?代码如下所示: 想要在UI Controller改变LiveData值呢?(比如点击某个Button设置文本内容更改)。...dispatchingValue情况 // 当对应数据观察者执行过程, 如有新数据变更, 则不会再次通知到观察者。...看一下源代码 将给定观察者添加到观察者列表,意味着给定观察者将接收所有事件,并且永远不会被自动删除,不管什么状态下都能接收到数据更改通知@MainThread public void observeForever...()方法,会注意AlwaysActiveObserver对象,意味着给定观察者将接收所有事件,并且永远不会被自动删除,不管什么状态下都能接收到数据更改通知 LiveData 利用版本管理、绑定 Lifecycle

2.8K00

有小伙伴说看不懂 LiveData、Flow、Channel,跟我走

Kotlin Flow 是基于 Kotlin 协程基础能力搭建一套数据流框架,从功能复杂性看是介于 LiveData 和 RxJava 之间解决方案。...那么我们如何确保订阅监听 Flow 数据流时,不会在错误状态更新 View 呢?这个问题在下文 第 6 节再说。...通过 WhildSubscribed() 策略能够没有订阅时候及时停止数据流,避免引起不必要资源浪费,例如一直从数据库、传感器读取数据。...安全地观察 Flow 数据流 前面也提到了,Flow 不具备 LiveData 生命周期感知能力,所以订阅监听 Flow 数据流时,会存在生命周期安全问题。...Channel 通道 协程基础能力使用数据流,除了上文提到到 Flow API,还有一个 Channel API。

2.1K10

由浅入深,详解 LiveData 那些事

引言 关于LiveData,2022尾声今天,从事 Android 开发小伙伴一定不会陌生。...认知里,如果你了解完这些,那么对于 LiveData ,我想就也就不会再有疑问:) 阅读本文前,建议读者有以下前置知识储备: 熟悉并会使用 LiveData; 理解 Lifecycle 设计;...此时用户更改了数据,那这个数据更改就没法通知给用户;那如果观察者又转为活跃状态了,本次更改岂不是跳过了?相应,我们又怎么确保同一个数据更新不会触达用户两次呢?...因为LiveData其本身设计驱使,由此也很容易诞生LiveDataBus,具体功能上,其做事情和 EventBus 相似,在某些特性,甚至优于后者。...相应 Android 面,Flow 也可以通过 asLiveData() 从而转为LiveData,由此兼容使用。

1.3K20

Android Jetpack - Room

Room 简介 Room 持久化库提供了一个基于 SQLite 抽象层,以便在利用 SQLite 全部功能同时实现更强大数据库访问 Room 库帮你 App 设备创建一个缓存,并作为此 App...单一事实来源,允许用户应用内查看关键信息一致副本,无论用户是否具有互联网连接 处理重要数量结构化数据应用程序可以从本地保存数据受益匪浅。...然后,设备重新联机后,任何用户启动内容更改都会同步到服务器 Room 三个主要部分包括 Database 包含数据库持有者,并作为应用程序持久关系数据基础连接主要访问点。...然后,应用程序使用每个 DAO 从数据库获取实体,并将对这些实体任何更改保存回数据库。最后,应用程序使用实体来获取和设置与数据库表列对应值 Room 组件关系图 ?... MVVM 架构位置 ?

1.9K70
领券