1.RecyclerView,ListView中获取position时谨慎使用holder.getAdapterPosition():
1.1 目前测试发现:至少两种情况下,ArrayIndexOutOfBoundsException: length=10; index=-1,必现:
- 调用removeItem时;
- 同时点击两个Item时;
1.2 官方文档解释:(点击看文档)
Note that if you’ve called notifyDataSetChanged(), until the next layout pass, the return value of this method will be NO_POSITION(-1)。
1.3 建议使用:getLayoutPosition();
2.函数返回值为ArrayList时,谨慎使用Collections.emptyList(),EMPTY_LIST:
2.1 list长度不能改变的两种情况:
-
list为Collections.emptyList()或Collections.EMPTY_LIST
-
list由数组转换而成时
list = Arrays.asList(“张三”, “李四”, “王五”);
list = Arrays.asList(new String[]{“Lucy”, “Tom”, “Jim”}); 如果对这两种情况下的list进行增删直接导致UnsupportedOperationException。
其中AbstractList.remove()和add();/** * <p>This implementation always throws an * {@code UnsupportedOperationException}. */ public void add(int index, E element) { throw new UnsupportedOperationException(); } /** * <p>This implementation always throws an * {@code UnsupportedOperationException}. */ public E remove(int index) { throw new UnsupportedOperationException(); }