如何在不同的活动中使用数据?

时间:2010-10-20 10:30:10

标签: android

我有两个活动A& B.在A中我有三个ArrayLists。我想在活动B中访问这些ArrayLists。我怎样才能做到这一点?这两个活动都在同一个包中。

3 个答案:

答案 0 :(得分:0)

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

我认为您需要将这些列表中的数据存储在某个共享位置:

  • 让它们成为可分割的并将它们存储在您应用的偏好中
  • 将它们存储在SQLite数据库
  • 通过启动Intent
  • 将它们传递给Activity B.

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

答案 1 :(得分: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中任何数据的底层实现的更改都可能导致旧数据不可读。

答案 2 :(得分:0)

要回答您的问题 - 您可以通过搜索stackoverflow轻松找到答案 - 如果您需要传递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");