只显示在ArrayList中添加的最后一项

时间:2016-06-19 17:47:15

标签: java android arraylist add

我是编程的新手,我正在尝试将项目添加到我创建的ArrayList中。然后我尝试在Android TextView中显示ArrayList以确认ArrayList的内容。简化的代码如下:

 public TextView textView1;
 public ArrayList<String> namesArray = new ArrayList<>();
 public static final String DEFAULT= "N/A";

 public void contactsArray() {
    loadArrayButton = (Button) findViewById((R.id.loadArrayButton));
    loadArrayButton.setOnClickListener(new View.OnClickListener() {
        @Override

        public void onClick(View view) {
              SharedPreferences sharedPreferences = getSharedPreferences("MyData", Context.MODE_PRIVATE);
              int howMany = sharedPreferences.getAll().size();

              for (int i = 1; i < howMany; i ++) {
                  String name = sharedPreferences.getString("name" + i, DEFAULT);
                  namesArray.add(sharedPreferences.getString("name" + i, DEFAULT));
            }

我知道共享首选项已正确保存,因为如果我单独检索它们,它们就会出现我对它的期望。当我显示ArrayList的内容时,只显示添加到我的ArrayList的最后一项。其余代码如下:

String listRepresentation = "";
for (String name : namesArray)
if ("".equals(listRepresentation))
    listRepresentation  = name; else
    listRepresentation  = ", " + name;
textView1.setText(listRepresentation );

再一次,唯一出现的是在for循环中添加的姓氏。任何帮助将不胜感激 - 谢谢!

4 个答案:

答案 0 :(得分:3)

在循环中显示结果,在每个索引处覆盖字符串。

使用+ =解决问题:

 String listRepresentation = "";
 for (String name : namesArray) {
     if ("".equals(listRepresentation)) {
          listRepresentation += name;
      } else {
          listRepresentation += ", " + name;
      }
 }
 textView1.setText(listRepresentation );

运算符+ =等于listRepresentation = listRepresentation + ...;

答案 1 :(得分:1)

你错过的是:

您刚刚设置了值listRepresentation,但未按顺序添加。

解决方案:

您可以使用此代码代替上一部分代码

String listRepresentation = "";
String showData = "";
for (String name : namesArray) {
    if ("".equals(listRepresentation)) {
        listRepresentation  = name;
    } else {
        listRepresentation  = ", " + name;
    }
showData = showData + listRepresentation;
}
textView1.setText(showData);

答案 2 :(得分:0)

请使用StringBuilder而不是string(listRepresentation)。问题将得到解决。

答案 3 :(得分:-1)

你知道吗,如果是sharedPreferences.getAll()。size();例如,你的代码放在namesArray中只有1项? 尝试

for (int i = 1; i <= howMany; i ++) {
              String name = sharedPreferences.getString("name" + i, DEFAULT);
              namesArray.add(sharedPreferences.getString("name" + i, DEFAULT));
        }