关于RecyclerView自实现点击事件出现的坑

556 阅读1分钟

具体情况:

我的需求是一个展示图片的Recyclview. 当我同时删除2个图片的时候就会出现数组越界异常. 如果我一个一个删除,就不会出现. 分析一下基本就能想到.Adapter的notifyDataSetChanged出现了问题. 发现这段

  public final int getAdapterPosition() { 
       if (mOwnerRecyclerView == null) { 
             return NO_POSITION;  //这个常量就是-1.
        }   
       return mOwnerRecyclerView.getAdapterPositionFor(this);
  }

解决办法1:(治标)

在xml里面RecyclerView标签加上

  android:splitMotionEvents="false"

禁止当前容器多点触摸.

如果app没有多点触摸需求,可以设置Theme

<itemname="android:splitMotionEvents">false</item>

来禁止掉这个功能,

解决办法2:(治本)

不要使用getAdapterPosition() 在adapter里面改用getLayoutPosition();来拿到position

发现个bug做个日记.

另外吐槽一下,hongyang的base-adapter里的MultiItemTypeAdapter还是getAdapterPosition().哈哈