1 回答
TA贡献1810条经验 获得超5个赞
我可以在上面的代码中看到 2 个问题,
当我们添加和删除时您正在更新数据库,这很好,但是您处理本地视图引用的方式是错误的。
原因:因为在你的情况下,不仅当你转到另一个屏幕时它不会工作,如果你滚动更多如果你有更多的项目然后回来它也不会工作,因为回收视图重用你更新的视图在检查监听器中,这导致了第二个问题
在 onBindData 中,你总是应该使用非收藏图标,所以每当你滚动和查看重用它时,它只会显示非收藏图标,你应该检查该项目是否是收藏,你应该更新视图
例如,你应该像下面那样
override fun onBindViewHolder(holder: VM, position: Int) {
val item = items.get(position)
if (item.favourite == 0) {
holder.name.text = item.name
} else {
holder.name.text = item.name + " Liked "
}
holder.favouriteIcon.setOnCheckedChangeListener { compoundButton, isChecked ->
// Should not update local view reference here
if(isChecked) {
// Update the local reference object, Just not to update from DB
item.favourite = 1
// Do the logic to update the DB to add the item in Fav
} else {
// Update the local reference object, Just not to update from DB
item.favourite = 0
// Do the logic to update to remove the item from Fav list
}
notifyItemChanged(position) // Helps to update the particular item
}
}
请根据您的项目修改代码。
添加回答
举报