我有一个简单的RecyclerView和Adapter,如下所示:
然后我想在用户点击按钮后重新排序项目(在另一个位置移动)。即我想将紫罗兰色盒子中的物品移到另一个位置。
所以我更改了适配器数据集和DiffUtils
中的项目,以便完成移动动画。
但是在动画结束时,屏幕看起来像这样:
如您所见:该项目与另一项目重叠:
我调试了我的DiffUtil Callback实现,一切正常。调度也按预期工作。我添加了一些日志:
data.getDiffResult().dispatchUpdatesTo(new ListUpdateCallback() {
@Override public void onInserted(int position, int count) {
Log.d("Test", "Insert position "+position+" count "+count);
}
@Override public void onRemoved(int position, int count) {
Log.d("Test", "Removed removed "+position+" count "+count);
}
@Override public void onMoved(int fromPosition, int toPosition) {
Log.d("Test", "Moved position "+fromPosition+" to " +toPosition);
}
@Override public void onChanged(int position, int count, Object payload) {
Log.d("Test", "Changed position "+position+" count "+count);
}
});
然后logcat打印预期的(正确的)结果
将位置3移至8
更改位置8计数1
它真的是一个RecyclerView错误吗?有人遇到过同样的问题吗?
我尝试了RecyclerView版本24.2.0
和25.0.0
,它们在UI中具有相同的行为和不正确的结果。