当数据不是从索引0开始时使用DiffUtil

时间:2019-10-23 20:20:59

标签: android androidx android-diffutils

我在RecyclerView中的项目结构如下:

Index | Item
0.      Header Item
1.      0. Data 
2.      1. Data
3.      2. Data
4.      3. Data
[....]

我的数据库自动将更新调度到RecyclerView。 当我使用DiffUtil时,我在索引3中删除了项目。在我的数据库中,索引2中的项目被DiffUitl Dispatcher删除了。我认为这是由于DiffUtil调度程序不知道我的项目被一个索引“偏移”了。我该如何解决?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用DiffUtil.DiffResult.dispatchUpdatesTo(ListUpdateCallback),实现自定义ListUpdateCallback

示例:

private class CustomListUpdateCallback(val adapter: RecyclerView.Adapter<*>) : ListUpdateCallback {
    override fun onChanged(position: Int, count: Int, payload: Any?) {
        adapter.notifyItemRangeChanged(position + 1, count, payload)
    }

    override fun onMoved(fromPosition: Int, toPosition: Int) {
        adapter.notifyItemMoved(fromPosition + 1, toPosition + 1)
    }

    override fun onInserted(position: Int, count: Int) {
        adapter.notifyItemRangeInserted(position + 1, count)
    }

    override fun onRemoved(position: Int, count: Int) {
        adapter.notifyItemRangeRemoved(position + 1, count)
    }
}