删除Room数据库最后一条数据后RecyclerView布局未即时更新解决方案咨询
问题根因
你在ViewModel的readAllData数据观察回调中,仅当返回的收藏列表不为空时才会调用adapter.setData()更新适配器数据源。当你删除最后一条收藏项后,数据库返回的列表为空,此时逻辑仅触发了空状态控件的显示,没有同步更新适配器的数据源,适配器内部仍保留着最后一条数据的缓存,所以RecyclerView不会主动移除该条目。
修复方案
修改FavoritesFragment中LiveData的观察逻辑,无论返回的收藏列表是否为空,都先更新适配器的数据,再控制空状态的显隐即可:
mfavoriteViewModel.readAllData.observe(viewLifecycleOwner, { favorite -> // 先同步更新适配器数据,空列表也会触发适配器刷新清除所有条目 adapter.setData(favorite) if (favorite.isEmpty()) { binding.emptyState.text = getString(R.string.emptyState) binding.emptyState.visibility = View.VISIBLE } else { binding.emptyState.visibility = View.GONE } })
可选优化(提升列表更新性能)
你当前的setData方法调用了全量刷新notifyDataSetChanged(),如果要更丝滑的更新效果,可以改用DiffUtil做增量更新,不需要修改现有逻辑结构,仅替换setData的实现即可。
内容的提问来源于stack exchange,提问作者dazai
相关产品推荐
相关产品推荐

