只显示数组的最后一个元素

Only the last element of the array is displayed

只填充数组的最后一个元素;当一个新元素添加到数组时,旧元素变为空。

public void SelectClick(View view) {
 ...
    materialCardView.setId(secondId);
    arrayPath = new String[secondId + 1]; //in class declaration String[] arrayPath = new 
String[secondId];
    //+ 1 needed in order not to get an error ArrayIndexOutOfBoundsException
    showFileChooser(); //calls method leer (внизу)
 ...
}

public void leer() {
    arrayPath[secondId] = FilePath; FilePath = ""; //the path that should fall into the array is supplied
    secondId++; //without this, the first element of the array overwrites itself and does not go further
 ...
}

使用此代码,日志显示第一个元素 I/System.out: [test],当添加数组的下一个元素时(按下按钮,SelectClick 方法),它显示 I/System.out: [null, test] 等等on,总是只有最后一个元素不为空。怎么办?
//评论改为英文

数组列表

因为你的数组是不断扩展的,所以不要使用固定大小的数组。使用 ArrayList.

    List<String> arrayPath = new ArrayList<>();
    arrayPath.add("test1");
    arrayPath.add("test2");
    System.out.println(arrayPath);

输出:

[test1, test2]

你的代码出了什么问题?

问题出在这一行:

    arrayPath = new String[secondId + 1];

这将创建一个包含所有 null 个元素的新数组,丢弃之前在 arrayPath 数组中的所有内容。

演示:

    String[] arrayPath = { "test1" };
    int secondId = 1;
    
    arrayPath = new String[secondId  + 1];
    arrayPath[secondId] = "test2";
    secondId++;
    
    System.out.println(Arrays.toString(arrayPath));

[null, test2]

如果您坚持使用数组,您可以使用 Arays.copyOf 方法创建一个新的更长的数组,其中包含所有旧元素:

    arrayPath = Arrays.copyOf(arrayPath, secondId + 1);
    arrayPath[secondId] = "test2";
    secondId++;

通过此更改,输出为:

[test1, test2]