为什么列表大小在吐司中返回0?
活动分类
List<Models> models= new ArrayList<>();
List<String> Images = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
putData();
Toast.makeText(this, "" + models.get(0).Images.size(), Toast.LENGTH_SHORT).show();
}
void putData() {
for (int x = 1; x <= 6; x++) {
Images.add(String.valueOf(x) + ".png");
}
models.add(new Model(Images));
Images.clear();
}
模型类
public class Models {
List<String> Images;
public Models(List<String> images) {
Images = images;
}
}
希望你能帮助我.......................................... .................
答案 0 :(得分:1)
因为这一行:
Images.clear();
清除列表Images
。
也许您认为Images
和models.get(0).Images
是2个不同的列表。
它们不是相同的,因为它们都指向同一列表。
删除
List<String> Images = new ArrayList<>();
从活动类声明中进行更改,并更改putData()
:
void putData() {
List<String> Images = new ArrayList<>();
for (int x = 1; x <= 6; x++) {
Images.add(String.valueOf(x) + ".png");
}
models.add(new Model(Images));
}
答案 1 :(得分:0)
您已在图像上调用clear()。您调用size()时,它们就消失了。
答案 2 :(得分:0)
因为要保留Images
的实例,然后在其上调用clear()
。
用Java创建新的ArrayList时,类似:
ArrayList<Something> somethings = new ArrayList<>();
,然后将其传递给另一个类:
SomeClass someClass = new SomeClass(somethings);
SomeClass包含的ArrayList与somethings
所引用的完全相同。
调用putData()
时,您会将ArrayList的单个实例传递给Models类。
您确实填充了它,但是随后您立即清除了它。由于您清除了Images
类中的putData()
列表,因此您也清除了Models实例中的Images
列表,因为两个列表是相同的。
将其设置为局部变量,然后删除clear()
:
void putData() {
ArrayList<String> Images = new ArrayList<>();
for (int x = 1; x <= 6; x++) {
Images.add(String.valueOf(x) + ".png");
}
models.add(new Model(Images));
}