Android:如何将多个 ArrayList<String> 值和一个 ArrayList<LatLng> 从一个 activity 传递到另一个包中?不工作

Android: How to pass MULTIPLE ArrayList<String> values and one ArrayList<LatLng> from one activity to another in a bundle? Not working

我有几个 List<String> 变量要从 Splash 传递到 Main activity:

1) 我在某处读到,我可以将它们作为 ArrayList<String>Splash 传递到 Main,并且有效... IE。 我只能收到第一个 ArrayList<String> 变量。在我下面的捆绑包中,我无法收到第二个 ArrayList<String>. (array_list2) 为什么?

2) 如何将 ArrayList<LatLng> 从一个 activity 传递给另一个

第一个Activity:

Intent intent = new Intent(SplashActivity.this, MainActivity.class);
Bundle b=new Bundle();
b.putStringArrayList("array_list1",(ArrayList<String>)Names);     
b.putStringArrayList("array_list2",(ArrayList<String>)City);
b.putStringArrayList("array_list3",(ArrayList<String>)Country);
b.putStringArrayList("array_list4",(ArrayList<String>)Code);
b.putStringArrayList("array_list5",(ArrayList<LatLng>)coordinates); //ERROR in this line, type mismatch!
intent.putExtras(b);
startActivity(intent);

第二个Activity:

Bundle b = getIntent().getExtras();
if (b != null) {
testList1 = b.getStringArrayList("array_list1");
testList2 = b.getStringArrayList("array_list2"); //THIS gives the same arraylist as testList1 and it is incorrect!
Log.e("TESTLIST1",testList1.toString()); //just using Log.e to view o/p as test
Log.e("TESTLIST2",testList1.toString());

请回答我的两个问题。 None 的其他主题对我有帮助,我在这上面花了 2 个多小时。 谢谢。

因为 LatLng class implements Parcelable interface, so instead of using Bundle. putStringArrayList use Bundle.putParcelableArrayList 发送包含 class 实现 Parcelable 接口的对象的 ArrayList。使用

b.putParcelableArrayList("array_list5",coordinates);

How to use parcelable with List or ArrayList - What is the syntax?

这样做:

ArrayList<String> arrCoordinates = new ArrayList<>(coordinates.size());
arrCoordinates.addAll(coordinates);
b.putParcelableArrayList("array_list5",arrCoordinates);

并从 Bundle

中获取 array_list5
ArrayList<LatLng> coordinates = b.getParcelableArrayList("array_list5"); 

putStringArrayList() 将不支持 ArrayList。

使用

 putParcelableArrayList();

而不是

 putStingArrayList();

否则你可以使用直接的意图方法。

像这样更改您的代码:

Intent intent = new Intent(SplashActivity.this, MainActivity.class);
Bundle b=new Bundle();
b.putStringArrayList("array_list1",(ArrayList<String>)Names);     
b.putStringArrayList("array_list2",(ArrayList<String>)City);
b.putStringArrayList("array_list3",(ArrayList<String>)Country);
b.putStringArrayList("array_list4",(ArrayList<String>)Code);

如果你想通过 bundle 对象使用下面的代码行。

b.putParcelableArrayList("array_list5",(ArrayList<LatLng>)coordinates);

否则通过意图对象。

intent.putParcelableArrayListExtra("array_list5",coordinates);
intent.putExtras(b);
startActivity(intent);