gpt4 book ai didi

android - DiffResult 调度有时会导致 'Inconsistency detected. Invalid view holder adapter positionViewHolder' 错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:04:02 27 4
gpt4 key购买 nike

我有一个接受两个列表的 RxJava2 Observable,计算它们的差异结果并将此数据发送到适配器。适配器在主线程上分派(dispatch)更新。

适配器中的调度代码:

 public void dispatchStreams(List<StreamV3> streams, @Nullable DiffUtil.DiffResult diffResult) {

if (streams == null) return;

streamsList.clear();
streamsList.addAll(streams);

if (diffResult != null) {
diffResult.dispatchUpdatesTo(this);
}
}

我发现“检测到不一致”。某些设备上有时会出现无效的 View 持有者适配器 positionViewHolder' 错误。而且我无法弄清楚我的代码有什么问题。Min SDK 21,Target SDK 26,RecyclerView 版本为 26.0.0。我知道扩展 LinearLayoutManager 并静默捕获此错误的解决方法,但这是一个糟糕的解决方案,我相信这里应该是更好的解决方案。

有人可以提供任何帮助吗?

最佳答案

我在这个 answer 中找到了这个问题的解决方案

问题似乎是由布局管理器上的 supportsPredictiveItemAnimations 属性引起的。当我将它设置为 false 时,不再发生崩溃。

public class LinearLayoutManagerWrapper extends LinearLayoutManager {

public LinearLayoutManagerWrapper(Context context) {
super(context);
}

public LinearLayoutManagerWrapper(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}

public LinearLayoutManagerWrapper(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}

@Override
public boolean supportsPredictiveItemAnimations() {
return false;
}
}

关于android - DiffResult 调度有时会导致 'Inconsistency detected. Invalid view holder adapter positionViewHolder' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46563485/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com