我有两个活动A& B.在A中我有三个ArrayLists。我想在活动B中访问这些ArrayLists。我怎样才能做到这一点?这两个活动都在同一个包中。
答案 0 :(得分:0)
您可能无法直接访问它们。通常只有1个Activity可以在前台。试图访问后台活动中的元素(就像你从活动B中列出的A一样)是一个糟糕的设计选择。
我认为您需要将这些列表中的数据存储在某个共享位置:
另外,也许您不需要将整个列表传递给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");