Android 是否将带有对象的ArrayList传递给新活动?

Android 是否将带有对象的ArrayList传递给新活动?,android,object,arraylist,android-intent,Android,Object,Arraylist,Android Intent,我正在尝试将ArrayList从第一个活动传递到下一个活动。基本上,第一个活动解析XML文件并创建一个包含对象的ArrayList。我要做的是将该ArrayList发送到我的第二个活动,并在ListView中显示一些对象数据 我本打算这样做,但看起来只有原始数据类型通常通过意图传递。是这样吗 如果是这样,传递数据的更好解决方案是什么?当然,Android必须提供一些东西才能做到这一点 非常感谢任何帮助/代码示例 谢谢 编辑: 我首先创建并调用intent,然后只解析我调用的活动中的XML,从而解

我正在尝试将ArrayList从第一个活动传递到下一个活动。基本上,第一个活动解析XML文件并创建一个包含对象的ArrayList。我要做的是将该ArrayList发送到我的第二个活动,并在ListView中显示一些对象数据

我本打算这样做,但看起来只有原始数据类型通常通过意图传递。是这样吗

如果是这样,传递数据的更好解决方案是什么?当然,Android必须提供一些东西才能做到这一点

非常感谢任何帮助/代码示例

谢谢

编辑:


我首先创建并调用intent,然后只解析我调用的活动中的XML,从而解决了这个问题。这样我就不需要再传递对象了。但是对于那些感兴趣的人,您可以阅读有关如何通过活动传递数据的内容,

我会在数组上执行一个toString,并通过执行
intent.putExtra(“label.array.toString())将其作为额外的传递然后在新活动中恢复它。

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

如果是字符串,则可以使用PutstringArrayList xtra(字符串名称,ArrayList值)
传递字符串列表。或者,您可以序列化列表,然后使用
putExtra(字符串名称,可序列化值)


如果您不想/不能使用上述内容,可以使用一个对列表进行静态引用的中心util类。只需在第一个活动中设置它,然后在第二个活动中获取它。

这可能是一种完全不好的做法,我也不知道更好的做法,但您可以将ArrayList声明为public和static。然后只需使用Activity.ArraylistName访问它。

复杂类型可以通过Parcelable传递。这个问题就是一个例子:


我做这个把戏是为了从第一个活动发送到第二个活动

第一项活动

ArrayList<String> mylist = new ArrayList<String>();  
Intent intent = new Intent(ActivityName.this, Second.class);
intent.putStringArrayListExtra("key", mylist);
startActivity(intent);
ArrayList mylist=new ArrayList();
意向意向=新意向(ActivityName.this,Second.class);
intent.putStringArrayListExtra(“键”,mylist);
星触觉(意向);
第二项活动

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");
ArrayList list=getIntent().getStringArrayListExtra(“键”);

但这是否也适用于复杂对象,它是否具有性能?如果性能是您的首要任务,我将不推荐它。我使用它将一个巨大的xml从一个活动传递到另一个活动,这导致了一个严重的延迟。结果取而代之的是在第二个活动中获取数据。但是对于较小的对象,我觉得应该没问题。
Intent.putExtra()
接受一个Bundle,所以您需要做更多类似的事情:
Bundle=newbundle();bundle.putStringArray(“arrayLabel”,(String[])arrayList.toArray();意向。额外支付(“额外支付”,捆绑)
然后在将接收ArrayList的活动中:
Bundle Bundle=intent.getBundleExtra(“extrasBundle”);ArrayList=Arrays.asList(bundle.getStringArray(“arrayLabel”)这被推荐了很多次,但是看起来很混乱。在我的应用程序中,我在与对象相同的类中创建了ArrayList,我将它存储在其中(在我的例子中,是一个自定义视图)。我知道putStringArrayListExtra()方法,但对于更复杂的对象,我需要这个方法。对我来说,使用静态似乎是一种糟糕的做法,看起来非常混乱。使用静态引用的名声当然值得怀疑,但通过使用专用类来获取/设置/存储它,您可以保持它非常干净。我个人在一个有多个页面的Android应用程序中使用了它,这让我非常高兴。