循环遍历 ArrayList 以在第二个 Activity Java 中的多行列表视图中显示?



我创建了第二个活动来显示 ArrayList 中的所有元素。例如,如果 ArrayList 在 MainActivity 中包含以下内容:

//This is an Object type
thingsList = ["This is list1","This is list2"]; 
Intent intent = new Intent(this, Activity2.class);
Bundle b = new Bundle;
b.putString("Lists", thingsList.toString());
intent.putExtras(b);
startActivity(intent);

我的活动2中有这个.java

ListView newListView = (ListView)findViewById(R.id.newListView);
Bundle b = getIntent().getExtras();
String newList = b.getString("Lists");
ArrayAdapter adapterList = new ArrayAdapter(this, R.layout.list_label, Collections.singletonList(newList));
newListView.setAdapter(adapterList);

它现在做的是:

[This is list1, This is list2]

如何遍历数组列表并使其显示在不同的行上

This is list1
This is list2

我尝试这样做但没有奏效

thingsList = ["This is list 1","This is list 2"];
Intent intent = new Intent(this, Activity2.class);
Bundle b = new Bundle;
for (Object makeList: thingsList) {
b.putString("Lists", makeList.toString());
intent.putExtras(b);
}
startActivity(intent);

它所做的只是抓取数组列表中的最后一个元素,例如

This is list2

提前感谢,不确定这个问题是否有意义。

您需要使用Bundle.putStringArrayList()而不是putString()。而且,在使用Intent时,您实际上可以跳过Bundle步骤,直接向Intent添加附加内容(Android将在幕后为您创建和填充捆绑包(。

我不知道您是如何获得thingsList引用的,但如果它只是一个通用List最安全的做法是在将其添加到捆绑包之前构建一个新ArrayList

thingsList = ["This is list1","This is list2"]; 
// you can skip this if thingsList is already an ArrayList
ArrayList<String> thingsArrayList = new ArrayList<>(thingsList);
Intent intent = new Intent(this, Activity2.class);
intent.putStringArrayListExtra("Lists", thingsArrayList); // or use thingsList directly
startActivity(intent);

然后,在另一边,您需要将其作为List获取。同样,您可以跳过Bundle,直接访问Intent附加功能:

ListView newListView = (ListView)findViewById(R.id.newListView);
List<String> newList = getIntent().getStringArrayListExtra("Lists");
ArrayAdapter adapterList = new ArrayAdapter(this, R.layout.list_label, newList);
newListView.setAdapter(adapterList);

是的,适当的方法是 @Ben P 所建议的。

我只是指出您尝试过的方法中的错误。

thingsList = ["This is list 1","This is list 2"];
Intent intent = new Intent(this, Activity2.class);
Bundle b = new Bundle;
for (Object makeList: thingsList) {
b.putString("Lists", makeList.toString());
intent.putExtras(b);
}
startActivity(intent);

由于 Bundle 对象是在 for 循环之外创建的,因此最后一个值将被前一个值覆盖。

你应该按如下方式制作新对象

for (Object makeList: thingsList) {
Bundle b=new Bundle();
b.putString("Lists", makeList.toString());
intent.putExtras(b);
}

相关内容

  • 没有找到相关文章

最新更新