3 回答
TA贡献1794条经验 获得超8个赞
我遇到了一个(可能)相关的问题-使用RecyclerView输入活动的新实例,但是使用较小的适配器为我触发了此崩溃。
RecyclerView.dispatchLayout()可以在致电前尝试从废料中取出物品mRecycler.clearOldPositions()。结果是它从位置高于适配器大小的公共池中提取项目。
幸运的是,只有PredictiveAnimations启用了它才能执行此操作,所以我的解决方案是子类化GridLayoutManager(LinearLayoutManager具有相同的问题和“修复”),并重写supportsPredictiveItemAnimations()以返回false:
/**
* No Predictive Animations GridLayoutManager
*/
private static class NpaGridLayoutManager extends GridLayoutManager {
/**
* Disable predictive animations. There is a bug in RecyclerView which causes views that
* are being reloaded to pull invalid ViewHolders from the internal recycler stack if the
* adapter size has decreased since the ViewHolder was recycled.
*/
@Override
public boolean supportsPredictiveItemAnimations() {
return false;
}
public NpaGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public NpaGridLayoutManager(Context context, int spanCount) {
super(context, spanCount);
}
public NpaGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) {
super(context, spanCount, orientation, reverseLayout);
}
}
TA贡献1802条经验 获得超10个赞
我通过mRecycler.setAdapter(itemsAdapter)
将所有项目添加到适配器中后延迟了耕作来解决了这一问题,mRecycler.addAll(items)
并且它可以正常工作。我不知道为什么要这么做,因为我是从图书馆的代码中查看并以“错误的顺序”看到这些行的,我很确定是这样,请有人能确认它解释为什么所以?甚至不确定这是否是有效答案
- 3 回答
- 0 关注
- 442 浏览
添加回答
举报