Android 回收站视图更新

Posted

技术标签:

【中文标题】Android 回收站视图更新【英文标题】:Android recycler view update 【发布时间】:2021-12-21 12:48:07 【问题描述】:

我有一个回收站视图,每个项目都有一个删除按钮,回收站视图的数据是一个实时数据列表。

基本上我观察列表,当我删除一个项目时,我只是将适配器再次传递给带有新列表的回收器视图,以便更新列表,就像这样

viewModel.loadBasketItems().observe(viewLifecycleOwner, 
            adapter = BasketFragmentAdapter(it, viewModel, requireContext())
            recycler.adapter = adapter
        ) 

我的第一个问题是每次我删除一个项目时,图像都会跳到列表的顶部,因为列表是完全重新创建的

我的第二个问题是我认为这不是很有效。

更改某些内容后更新回收站视图的最佳方法是什么

【问题讨论】:

这个问题可以使用DiffUtil;它仅使用更改更新 RecyclerView @Zain 如果他们每次都重置实际的适配器,那将无济于事。 @GabeSechan 当然,我只是给出了想法,而不是实现;他们应该提交新列表而不是重置它 【参考方案1】:

您不应该那样重置适配器。保持适配器不变,但调用 notifyDataSetChanged()。这告诉适配器它的数据已经改变,这将告诉回收器视图重绘自己。您正在做的事情使回收器视图假定它有一个全新的适配器,并且需要删除有关旧适配器的所有信息。

更好的是调用适配器上更具体的通知函数之一,告诉它哪些元素发生了变化,但一般的通知函数就足够了,直到你看到性能问题。

【讨论】:

通知特定更改不仅仅是为了性能。它也看起来更好,并通过动画更改提供更好的用户反馈。虽然我认为如果你要这样做,ListAdapter 更容易使用。

以上是关于Android 回收站视图更新的主要内容,如果未能解决你的问题,请参考以下文章

在回收器视图适配器android Kotlin之外更新ProgressBar

将回收站视图数据中的 onMove() 更改更新到房间数据库

回收站视图位置

如何实现android的垂直滑动视图UI

当我在 Android 中将文件上传到 Firebase 存储时,进度条没有更新

回收站视图 (Xamarin Android )