故事背景:
操作读卡模块,返回数据是读到的所有标签的ID,我是将所有ID放在一个List里面的。然后在读卡器返回数据时,我更新RecyclerView的数据。
第一次我将RecyclerView的Adapter的数据集合mTagIDs=data
(都是List<String>),这是相当糟糕了,这压根就是将mTagIDs重新指向新的对象,根本不会更新RecyclerView的数据。
然后我就是用了Collections.copy(dest,src)这个方法,然后就IndexOutOfBoundsException
,看一下这个方法的注释
Copies all of the elements from one list into another. After the
operation, the index of each copied element in the destination list
will be identical to its index in the source list. The destination
list must be at least as long as the source list. If it is longer, the
remaining elements in the destination list are unaffected.
就是dest的长度要大于src的长度,不然就越界。可是我怎么知道dest和src谁更长啊。
解决方式:
所以我只好放弃这个方法,改用Collections.addAll(Collection<? super T> c, T... elements);而且将之前的方法返回数据由List<String>改成了String[].
强势粘贴代码
没码可粘,创造条件也要粘
public static <T> boolean addAll(Collection<? super T> c, T... elements) {
boolean result = false;
for (T element : elements)
result |= c.add(element);
return result;
}