传递包含对象的ArrayList到新的Activity?

9
我试图从第一个Activity传递ArrayList到下一个Activity。基本上,第一个Activity解析一个XML文件并创建一个包含对象的ArrayList。我的目标是将该ArrayList发送到我的第二个Activity,并在ListView中显示一些对象数据。
我想过使用intent来实现这一点,但看起来只有基本数据类型通常可以通过intent传递。这是对的吗?
如果是这样,有什么更好的解决方案来传递数据?肯定Android必须提供某种方法来完成这种事情。
非常感谢任何帮助/代码示例。
谢谢。
编辑:
我通过首先创建和调用意图,并仅在我所调用的Activity中解析XML来解决了这个问题。这样,我不再需要传递对象。但是对于那些感兴趣的人,可以阅读有关如何通过活动传递数据的信息,在这里。
6个回答

5

2
我会对数组执行 toString 方法,通过 intent.putExtra("label". array.toString()); 将其作为额外信息传递,并在新的活动中恢复它。

但是这个方法也适用于复杂对象吗?而且它的性能如何? - user393964
如果性能是您的首要考虑因素,我不建议使用它。我曾试图将一个巨大的XML从一个活动传递到另一个活动,结果导致了严重的延迟。最终我选择在第二个活动中获取数据。但对于较小的对象,我认为使用它应该还可以。 - azharb
1
Intent.putExtra() 接受一个 Bundle 参数,因此您需要像这样进行操作:`Bundle bundle = new Bundle(); bundle.putStringArray("arrayLabel",(String[])arrayList.toArray()); intent.putExtra("extrasBundle",bundle);`然后在将接收 ArrayList 的 Activity 中:`Bundle bundle = intent.getBundleExtra("extrasBundle"); ArrayList list = Arrays.asList(bundle.getStringArray("arrayLabel"));` - BigFwoosh

1

如果是字符串,您可以使用putStringArrayListExtra(String name, ArrayList<String> value)传递字符串列表。或者,您可以序列化List,然后使用putExtra(String name, Serializable value)

如果您不想/不能使用上述方法,您可以使用一个中央工具类,并在其中设置对List的静态引用。只需在第一个Activity中设置它,在第二个Activity中获取它即可。


我知道putStringArrayListExtra()方法,但我需要更复杂对象的解决方案。而使用静态似乎是一种不好的做法,看起来很混乱。 - user393964
使用静态引用可能存在争议,但是您可以通过使用专用类来获取/设置/存储它来保持非常干净。我个人在一个具有多个页面的Android应用程序中使用它,并且非常满意。 - Haphazard

1
这可能是非常糟糕的做法,我不知道是否更好,但您可以将ArrayList声明为public和static。然后只需使用Activity.ArraylistName访问它。

1
这个被很多人推荐,但看起来真的很混乱。 - user393964
在我的应用程序中,我在同一类中创建ArrayList和存储在其中的对象(在我的情况下是自定义视图)。这使得跟踪和保持组织相当容易。 - Amplify91

0
我用了一个技巧来从第一个活动发送到第二个活动。
第一个活动。
ArrayList<String> mylist = new ArrayList<String>();  
Intent intent = new Intent(ActivityName.this, Second.class);
intent.putStringArrayListExtra("key", mylist);
startActivity(intent);

第二个活动

检索

ArrayList<String> list =  getIntent().getStringArrayListExtra("key");

0

您可以在应用程序级别设置ArrayList的范围,也可以使用parcelable来实现。


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