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);
我有几个 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);