首页
学习
活动
专区
工具
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.3K20

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
  • Android Jetpack - LiveData

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

    2K30

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

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

    2.1K20

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

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

    2.4K30

    一篇掌握LiveData transformations

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

    1.7K20

    “终于懂了“系列: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.5K10

    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从零开始搭建MVVM架构(4)——LiveData

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

    2.4K30

    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.9K01

    LiveData详细分析

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

    2.9K00

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

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

    2.5K10

    由浅入深,详解 LiveData 的那些事

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

    1.4K20

    Android Jetpack - Room

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

    1.9K70

    正式发布 Android 架构组件 1.0 稳定版

    虽然我们今日才发布稳定版,其测试版组件早已被整合进达十亿量级下载的 App 中。架构组件帮助很多顶级开发团队,如 Zapppos,将更多的时间集中在更为关键的工作中。 ?...在架构组件发布之前,我们有自己的 ViewModel 实现,通过加载器(Loader) 和依赖注入(Dependency Injection)保证即使配置更改后,ViewModel 依旧不变。...我们最近转用了架构组件中的 ViewModel 实现,并完全摆脱了重复工作,我们发现可以将更多的时间用于设计、业务逻辑和测试,而不是浪费在样板代码或担心 Android 生命周期的问题上。...同时我们也开始借助 LiveData —— 一个可以感知 Activity 生命周期的数据容器 —— 用于获取和显示网络数据,而不用再担心网络调用的订阅管理。...在过去的几个月中,我们正对各位提出的反馈,认真作出改进。在最近通过 Alpha 测试版渠道,我们还发布了新组件 —— PagedList,解决大家用 RecyclerView 处理大数据集的困难。

    51420
    领券