int realPosition= position - mPositions.get(viewType);
如果position为0, mPositions根据当前类型获取的集合的长度, 它们一减,肯定是一个负数啊,为什么在下面List直接使用没有报索引越界,
我自己写了个demo,那个方法是:
private void addTypeByList(int type, List list) { positions.put(type, types.size()); for (int i = 0; i < list.size(); i++) { types.add(type); } }
因为第一次加list1的时候,types.size()=0,所以不会出现负数的情况。
有了个可以兼容数据长度的方法
private List<Object> allList = new ArrayList<>();
在构造方法中或者在add方法中
allList.addAll(dataListOne);
allList.addAll(dataListTwo);
allList.addAll(dataListThree);
在onBindViewHolder方法中
int realPosition = 0;
Object object = allList.get(position);
if(object instanceof DataModelOne){
for (int i=0;i<dataListOne.size();i++){
if(object == dataListOne.get(i)){
realPosition = i;
}
}
}else if(object instanceof DataModelTwo){
for (int i=0;i<dataListTwo.size();i++){
if(object == dataListTwo.get(i)){
realPosition = i;
}
}
}else if(object instanceof DataModelThree){
for (int i=0;i<dataListThree.size();i++){
if(object == dataListThree.get(i)){
realPosition = i;
}
}
}
这样就能拿到realPosition的位置了
if(position<10){
realPosition = position - mPosition.get(viewType) +10;
}else if(position>=10 && position<20){
realPosition = position - mPosition.get(viewType);
}else{
realPosition = position - mPosition.get(viewType) -10;
}
这样可以解决,但是这个方法太局限了,我再找个好点的方法
我这边写的时候,一直是越界的,老师写的时候我就觉得这里肯定有问题,但是不知道为什么,老师能运行起来