仅显示 ArrayList 中添加的最后一项
Only the last item added in ArrayList shows
我是一般编程新手,正在尝试将项目添加到我创建的 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 循环中添加的姓氏。任何帮助将不胜感激-谢谢!
在显示结果的循环中,您覆盖了每个索引处的字符串。
使用 += 解决问题:
String listRepresentation = "";
for (String name : namesArray) {
if ("".equals(listRepresentation)) {
listRepresentation += name;
} else {
listRepresentation += ", " + name;
}
}
textView1.setText(listRepresentation );
运算符 += 等于 listRepresentation = listRepresentation + ...;
你错过的是:
您刚刚设置了值listRepresentation
,但没有按顺序添加。
解决方案:
您可以使用此代码代替最后一部分代码
String listRepresentation = "";
String showData = "";
for (String name : namesArray) {
if ("".equals(listRepresentation)) {
listRepresentation = name;
} else {
listRepresentation = ", " + name;
}
showData = showData + listRepresentation;
}
textView1.setText(showData);
你知道如果 sharedPreferences.getAll().size();例如,您的代码将 2 个项目放入 namesArray 中,只有 1 个项目?
尝试
for (int i = 1; i <= howMany; i ++) {
String name = sharedPreferences.getString("name" + i, DEFAULT);
namesArray.add(sharedPreferences.getString("name" + i, DEFAULT));
}
请使用 StringBuilder 而不是字符串 (listRepresentation)。问题就解决了。
我是一般编程新手,正在尝试将项目添加到我创建的 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 循环中添加的姓氏。任何帮助将不胜感激-谢谢!
在显示结果的循环中,您覆盖了每个索引处的字符串。
使用 += 解决问题:
String listRepresentation = "";
for (String name : namesArray) {
if ("".equals(listRepresentation)) {
listRepresentation += name;
} else {
listRepresentation += ", " + name;
}
}
textView1.setText(listRepresentation );
运算符 += 等于 listRepresentation = listRepresentation + ...;
你错过的是:
您刚刚设置了值listRepresentation
,但没有按顺序添加。
解决方案:
您可以使用此代码代替最后一部分代码
String listRepresentation = "";
String showData = "";
for (String name : namesArray) {
if ("".equals(listRepresentation)) {
listRepresentation = name;
} else {
listRepresentation = ", " + name;
}
showData = showData + listRepresentation;
}
textView1.setText(showData);
你知道如果 sharedPreferences.getAll().size();例如,您的代码将 2 个项目放入 namesArray 中,只有 1 个项目? 尝试
for (int i = 1; i <= howMany; i ++) {
String name = sharedPreferences.getString("name" + i, DEFAULT);
namesArray.add(sharedPreferences.getString("name" + i, DEFAULT));
}
请使用 StringBuilder 而不是字符串 (listRepresentation)。问题就解决了。