我在Android Studio中有这段代码:
for (ArrayList<Bitmap> arr : imgs) {
for (Bitmap img : arr) {
if (img != null) {
arrayList.add(img.getHeight());
}
else {
arrayList.add(null);
}
}
heights.add(arrayList);
arrayList.clear();
}
先前声明并填充imgs,并将高度声明为
ArrayList<ArrayList<Integer>>
我得到的是:
[[58]]
[[null], [null]]
[[75], [75], [75]]
[[null], [null], [null], [null]]
[[1200], [1200], [1200], [1200], [1200]]
[[960], [960], [960], [960], [960], [960]]
[[960], [960], [960], [960], [960], [960], [960]]
[[612], [612], [612], [612], [612], [612], [612], [612]]
[[1632], [1632], [1632], [1632], [1632], [1632], [1632], [1632]]
等等。每次它没有将值添加到数组中,但它用新的值替换其中的所有值。怎么了?
答案 0 :(得分:3)
heights.add(arrayList);
arrayList.clear();
您始终将相同的arrayList
实例添加到heights
,然后清除它,以便丢失所有以前的值。
您应该在外部循环的每次迭代中创建一个新的ArrayList
实例。
for (ArrayList<Bitmap> arr : imgs) {
arrayList = new ArrayList<Integer> ();
for (Bitmap img : arr) {
if (img != null) {
arrayList.add(img.getHeight());
}
else {
arrayList.add(null);
}
}
heights.add(arrayList);
}