我在Android中遇到了一个令人烦恼的问题,即REALM和RecyclerView。 我做了一个简单的项目来说明这个问题 https://github.com/JamesDeegan/RealmRecyclerBug
从域中快速删除项目时会出现错误。克隆我的应用程序时获取错误的一种简单方法是使用两根手指并同时按下两个项目上的删除按钮。
错误范围从
流程:realmrecyclerbug.com.realmrecyclerbug,PID:8615 java.lang.IndexOutOfBoundsException:检测到不一致。无效的视图持有者适配器positionViewHolder {1257789 position = 3 id = -1,oldPos = 4,pLpos:4 scrap [attachedScrap] tmpDetached no parent}
到
java.lang.ArrayIndexOutOfBoundsException:rowIndex小于0.
我已经在网上搜索了好几天,最好的"修复"我能找到的就是覆盖GridLayoutManagers onLayoutChildren方法。
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
try {
super.onLayoutChildren(recycler, state);
} catch (IndexOutOfBoundsException e) {
Log.e("probe", "meet a IOOBE in RecyclerView");
//notifyDataSetChanged();
}
}
这不是最好的解决方案,因为即使我在catch块中调用notifyDataSetChanged,仍然有时候适配器与域列表不匹配(即域不包含任何项,但是recycleler视图有一个或两个死视图不会对点击做出反应)..
请帮忙!