问题:
使用Google的分页库Paging
时,通过数据库获取LiveData
,在点击按钮的时候更新某一个项目的某个属性(如“点赞”),然后将改变后的数据存储到数据库中,但是页面状态并没有更新。
分析:
通过定位发现:
数据库已经成功更新
PagedList
数据也已经更新并且回调了PagedListAdapter
的DiffUtil.ItemCallback
的areContentsTheSame
方法,但是oldItem
和newItem
都是最新的值一直返回true,所以检测不出有更新,故而没有调用刷新页面。
解决:
反复确认每次给adapter.submitList()
的数据PagedList
都是新的对象,但是没想到这个PagedList
中的每个item
也要是新的,否则就会导致上述问题。
解决方案就是,新建一个itemData
来保存要修改的项目的数据,并传递到PagedList
中(本文中通过更新数据库来更新PagedList
),这样页面才能正常更新。
解决方案来自这里:
https://stackoverflow.com/questions/54493764/pagedlistadapter-does-not-update-list-if-just-the-content-of-an-item-changes/54505078#54505078