1

我的 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 调度程序不知道我的项目被一个索引“偏移”。我怎样才能解决这个问题?

4

1 回答 1

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)
    }
}
于 2020-07-29T06:18:11.477 回答