将ArrayList从一个活动传递到另一个活动

11

我该如何将一个ArrayList从一个活动传递到另一个活动?

5个回答

42
这取决于arraylist的类型。
  • putIntegerArrayListExtra(String name, ArrayList<Integer> value)

  • putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value)

  • putStringArrayListExtra(String name, ArrayList<String> value)

  • putCharSequenceArrayListExtra(String name, ArrayList<CharSequence> value)

然后,您可以通过用键字符串替换put来从下一个活动中读取,例如:

myIntent.getStringArrayListExtra("arrayPeople");

@LabeebP 如何将 ArrayList<Object> 传递给另一个类? - Harish Koona

4
您可以在此处创建一个包,其中包含由Labeeb提供的Parcelable数组列表,并将其设置为意图。以下是代码:

您可以在此处创建一个包,其中包含由Labeeb提供的Parcelable数组列表,并将其设置为意图。以下是代码:

Intent i = new Intent(this,name.class);
Bundle b = new Bundle();
b.putIntegerArrayListExtra(String name, ArrayList<Integer> value);
//b.putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value);
//b.putStringArrayListExtra(String name, ArrayList<String> value);
i.putExtra(String name,b);
startActivity(i);

如何在另一个活动中获取数据:

//pseudo code
Bundle b = getIntent().getExtra().putParcelableArrayListExtra(String name);

0

在已撤销的 Activity 中,您应该使用

Bundle bundle = getIntent().getExtras();             
ArrayList<String> stringArray = bundle.getStringArrayList(ParentActivity.STRING_LIST);

其中ParentActivity.STRING_LIST是您列表的关键常量。


0

根据我的经验,在你从一个活动转移到另一个活动时,创建静态类并将你的数组列表放入其中。

当你到达另一个活动时,访问存储在静态类中的值。

更新
随着时间的推移,我学到了这是一种可怕的做法。当对象被清除/重新创建时,静态值可能会丢失。然后我们也会在内存中存储大量数据。使用像 Parcelable 这样的东西是一个好习惯。


5
使用静态字段来在活动之间传输数据是一种非常糟糕的设计:/ - Valentin Rocher
为什么呢?如果只涉及到少量的值!? - Aman Alam
7
因为当用户执行“返回”或“onPause()”等操作时,应用程序仍然认为变量在内存中,而实际上它们并不在,这会导致应用程序崩溃。我吃了亏才明白这一点 :-) - Infiniti Fizz
2
谢谢!我也正在艰苦学习中 :p 看到那三个踩的!:( - Aman Alam
1
嗯,@nick,这是我的答案,我也学到了这是一种可怕的做法。当对象被擦除/重新创建时,静态值可能会丢失。然后我们也会在内存中存储大量数据。使用像 Parcelable 这样的东西是一个好习惯。 - Aman Alam
显示剩余2条评论

-2

当你创建意图时,可以通过以下方式设置数据:

intent.putExtra("keyName", "somevalue");

当意图B启动时,您可以通过以下方式获取数据:

Bundle extras = getIntent().getExtras();
if(extras !=null)
{
   String value = extras.getString("keyName");
}

这是一个ArrayList,不是一个String。 - Aman Alam
我无法获取那些值...我得到了空值...提前谢谢。 - think shra1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接