Android 回收站视图更新
Android recycler view update
我有一个回收站视图,每个项目都有一个删除按钮,回收站视图的数据是一个实时数据列表。
基本上我在观察列表,当我删除一个项目时,我只是将适配器再次传递给带有新列表的回收器视图,以便更新列表,就像这样
viewModel.loadBasketItems().observe(viewLifecycleOwner, {
adapter = BasketFragmentAdapter(it, viewModel, requireContext())
recycler.adapter = adapter
})
我的第一个问题是每次我删除一个项目时图像都会跳到列表的顶部,因为列表是完全重新创建的
我的第二个问题是我认为这不是很有效。
更改某些内容后更新回收站视图的最佳方法是什么
您不应该那样重置适配器。保持适配器不变,但调用 notifyDataSetChanged()。这告诉适配器它的数据已经改变,这将告诉回收器视图重绘自己。您正在做的事情使回收站视图假设它有一个全新的适配器并且需要删除有关旧适配器的所有信息。
更好的方法是调用适配器上更具体的通知函数之一,告诉它更改了哪些元素,但一般的通知函数就足够了,直到您看到性能问题。
我有一个回收站视图,每个项目都有一个删除按钮,回收站视图的数据是一个实时数据列表。
基本上我在观察列表,当我删除一个项目时,我只是将适配器再次传递给带有新列表的回收器视图,以便更新列表,就像这样
viewModel.loadBasketItems().observe(viewLifecycleOwner, {
adapter = BasketFragmentAdapter(it, viewModel, requireContext())
recycler.adapter = adapter
})
我的第一个问题是每次我删除一个项目时图像都会跳到列表的顶部,因为列表是完全重新创建的
我的第二个问题是我认为这不是很有效。
更改某些内容后更新回收站视图的最佳方法是什么
您不应该那样重置适配器。保持适配器不变,但调用 notifyDataSetChanged()。这告诉适配器它的数据已经改变,这将告诉回收器视图重绘自己。您正在做的事情使回收站视图假设它有一个全新的适配器并且需要删除有关旧适配器的所有信息。
更好的方法是调用适配器上更具体的通知函数之一,告诉它更改了哪些元素,但一般的通知函数就足够了,直到您看到性能问题。