为什么列表大小返回0?

时间:2018-12-01 12:22:07

标签: android arraylist

为什么列表大小在吐司中返回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;
    }
}

希望你能帮助我.......................................... .................

3 个答案:

答案 0 :(得分:1)

因为这一行:

Images.clear();

清除列表Images
也许您认为Imagesmodels.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));
}