2

我知道有一种简单的机制可以在活动之间传递对象。我通常使用BundleandputParcelable()或 put Serializable(),但我知道它实际上是通过打包和解包对象来传递原始数据,而不保留引用。

但现在我的问题不同了——我需要传递对一些服务和其他活动的引用。有没有办法做到这一点?


也许我在实际问题上解释了我的问题:

  1. 我有一个简单的类City,其中存储天气数据等。
  2. 我把它放在ListFragment里面并在那里展示。
  3. 我还有带有 的片段GoogleMap,它显示了带有天气的列表中的城市。

我应该如何存储cities: List<City>在我的应用程序中?

4

3 回答 3

13

我需要传递对某些服务和其他活动的引用

你不可以。您需要允许“某些服务和其他活动”访问相同的数据。通过引用传递将是实现此目的的一种方法,但它是一种在 Android 中不常用的方法,就像它不常用在 Web 应用程序中一样(例如,页面不会将 JavaScript 对象传递给其他页面)。

典型的方法是有一个中央数据模型,例如一个管理一堆 POJO 的单例,由数据库支持。然后,您在 Android 中传递标识符,这些标识符通常是简单的值(整数、字符串等)。

于 2013-02-19T21:16:17.653 回答
4

由于有问题的对象是一个简单的列表,您可以扩展 Application 并将列表存储在其中:

public class MyApp extends Application {

    List<City> cityList.....

    //onCreate()

    public List<City> getList() {}

    public List<City> setList()
}

然后只需调用:

MyApp app = getApplication(); //getActivity().getApplication() in the Fragment
List<City> mylist = app.getList();
于 2013-02-19T21:15:13.507 回答
0

请参见:

在 Intent 中传递对象引用而不实现 Serializable 或 Parcelable

您不能跨进程传递对对象的引用。正如马克指出的那样,你可以做很多功能相似的事情。但是,您的问题的答案是“不”

于 2013-02-19T22:08:28.210 回答