【问题标题】:Android: How to pass MULTIPLE ArrayList<String> values and one ArrayList<LatLng> from one activity to another in a bundle? Not workingAndroid:如何将多个 ArrayList<String> 值和一个 ArrayList<LatLng> 从一个活动传递到捆绑包中的另一个?不工作
【发布时间】:2015-12-03 06:19:26
【问题描述】:

我有几个List&lt;String&gt; 变量要从Splash 传递到主要活动:

1) 我在某处读到,我可以将它们作为ArrayList&lt;String&gt;Splash 传递到Main,它可以工作......即 我只能收到第一个 ArrayList&lt;String&gt; 变量。在下面的捆绑包中,我无法收到第二个 ArrayList&lt;String&gt;. (array_list2) 为什么?

2) 如何将ArrayList&lt;LatLng&gt; 从一个活动传递到另一个活动

第一个活动:

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);

第二个活动:

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());

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

【问题讨论】:

  • 为什么要将每个对象都转换为ArrayList&lt;String&gt;
  • 方法 putStringArrayList 仅支持 ArrayList,而 List 没有其他方法

标签: android android-intent android-activity arraylist android-bundle


【解决方案1】:

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);

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

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

否则通过意图对象。

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

【讨论】:

  • 您能否解释一下 List 和 ArrayList 的第一个和第二个活动?是“intent.putExtras(b);”对吗?
  • 意图,putExtras(b);仅是正确的..LatLng 类是一个 parcelable 类,所以应该使用 putParcelableArrayList("array_list5",coordinates);
  • 我收到错误消息:“Bundle 类型中的 putParcelableArrayList(String, ArrayList extends Parcelable>) 方法不适用于参数 (String, List)” - 另外,pl .检查我的第二个活动中的 cmets...我在第二个活动中没有收到第二个数组列表。
  • 您不应键入强制转换数组列表。无论如何,您只传递 arrayList 对象 na..so 不需要类型转换。
  • 我了解将 putParcelableArrayList 用于 LatLng。将它用于 List 的语法是什么?我的代码有这个错误 - ““Bundle 类型中的 putParcelableArrayList(String, ArrayList extends Parcelable>) 方法不适用于参数 (String, List)”"
【解决方案2】:

因为LatLng 类实现了Parcelable 接口,所以不要使用Bundle. putStringArrayList,而是使用Bundle.putParcelableArrayList 发送包含实现Parcelable 接口的类对象的ArrayList。使用

b.putParcelableArrayList("array_list5",coordinates);

如何使用 Parcelable 与 List 或 ArrayList - 什么是 语法?

这样做:

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"); 

【讨论】:

  • 您能否解释一下 List 和 ArrayList 的第一个和第二个活动?是“intent.putExtras(b);”对吗?
  • @Zac1:我的问题是Why casting every object to ArrayList&lt;String&gt; ?
  • 方法 putStringArrayList 仅支持 ArrayList,而 List 没有其他方法
  • 是的,第二个活动没有收到第二个数组列表。为什么?请查看我的代码中的 cmets。此外,在 List 上使用 parcelable 会出现错误,“Bundle 类型中的 putParcelableArrayList(String, ArrayList extends Parcelable>) 方法不适用于参数 (String, List)”
  • @Zac1: 好的,然后使用(ArrayList&lt;LatLng&gt;)coordinates
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
相关资源
最近更新 更多