2010-10-20 38 views

回答

0

要回答你的问题 - 你可以很容易地通过搜索计算器找到了答案 - 如果你需要传递一个ArrayList,你可以这样做:

ArrayList<String> list = new ArrayList<String>(); 
list.add("hello"); 

Bundle b = new Bundle(); 
b.putSerializable("myList", list); 

Intent myIntent = new Intent(this, ActivityB.class); 
myIntent.putExtras(b); 
startActivity(myIntent); 

而且在ActivityB:

Intent myIntent = this.getIntent(); 
ArrayList<String> list = (ArrayList<String>) myIntent.getSerializableExtra("myList"); 
+0

谢谢lotttttt – 2010-10-20 14:03:30

0

您可能无法直接访问它们。通常只有1个活动可以在前台。试图访问后台Activity中的元素(就像你从A中列出的A一样)是一个糟糕的设计选择。

我认为你需要从这些清单中的数据存储在某个共享位置:

  • 让他们parcelable并
  • 他们店里存放在你的应用程序的喜好在一个SQLite数据库
  • 通过他们到活动B通过起始意图

此外,也许你不需要将整个列表传递给B,也许你只需要其中的一部分,也可以考虑。

+0

如果我需要将部分数据传递给B,那么它可以完成? – 2010-10-20 10:53:35

+0

你需要把它们作为额外的数据。实例化一个新的Intent对象,然后使用putInt(),putString()等来执行此操作。然后用这个instent来启动B活动。 – 2010-10-20 12:23:26

0
* make them parcelable and store them in you app's preferences 
* store them in a SQLite db 
* pass them to Activity B via the starting Intent 

这是错误的。错误我的意思是,无需将Parcelable对象存储在持久性存储中,因为一旦您创建对象Parcelable,另一个Activity就可以在没有序列化的情况下访问对象(此外不推荐序列化)。 Android docs read

可以通过IBinder发送的消息(数据和对象引用)的容器。一个Parcel可以同时包含在IPC的另一端(使用这里写入特定类型的各种方法,或者通用的Parcelable接口)的平坦数据,以及引用另一端的IBinder对象的引用一个代理IBinder与包裹中的原始IBinder连接。

包裹不是一个通用的序列化机制。该类(以及用于将任意对象放入Parcel的相应Parcelable API)被设计为高性能IPC传输。因此,将任何Parcel数据放入持久性存储中是不恰当的:Parcel中任何数据的底层实现中的更改都会导致旧数据无法读取。

相关问题