donkingliang / GroupedRecyclerViewAdapter

GroupedRecyclerViewAdapter可以很方便的实现RecyclerView的分组显示,并且每个组都可以包含组头、组尾和子项;可以方便实现多种Type类型的列表,可以实现如QQ联系人的列表一样的列表展开收起功能,还可以实现头部悬浮吸顶功能等。
Apache License 2.0
1.65k stars 216 forks source link

adapter.notifyGroupChanged(1)会出现Android Inconsistency detected. Invalid item position #87

Closed zfy199466 closed 2 years ago

zfy199466 commented 2 years ago

我这边弄了分组的列表,固定了2组 这是我的代码 adapter = new MyAdapter(getContext(),list1,list2); GroupedGridLayoutManager gridLayoutManager = new GroupedGridLayoutManager(getContext(), 2, roomDevicesAdapter){ //重写这个方法 改变子项的SpanSize。 //这个跟重写SpanSizeLookup的getSpanSize方法的使用是一样的。 @Override public int getChildSpanSize(int groupPosition, int childPosition) { if(groupPosition == 0){ return 2; } return super.getChildSpanSize(groupPosition, childPosition); } }; rv.setLayoutManager(gridLayoutManager); int space = PhoneUtil.dp2px(getContext(), 10); GroupedGridItemDecoration itemDecoration = new GroupedGridItemDecoration(adapter,0,null, 0,null,space,null,space,null); rv.addItemDecoration(itemDecoration); rv.setAdapter(adapter);

我这里顶部有多个按钮,用的同一个recycleview来展示数据,点击不同按钮展示给group=1展示不同数据(group=0是固定了数据,就是上面的list1) 这是我切换list2数据的代码: list2.clear(); list2.addAll(allData.get(tab.getPostion())); adater.notifyGroupChanged(1);

我滚动了RecycleView后,进行数据切换会出现这个异常,而且出现的概率还挺大的,请问需要怎么解决啊? java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 8(offset:8).state:15 androidx.recyclerview.widget.RecyclerView{9a21a4a VFED..... ......I. 35,0-1405,1569 #7f0a08f7

donkingliang commented 2 years ago

notifyGroupChanged等局部刷新方法有点问题,计算下标可能错误。你先用notifyDataChanged刷新吧

zfy199466 commented 2 years ago

好的,谢谢。