如何在Android应用程序中传递引用?

时间:2013-02-19 21:11:50

标签: android bundle pass-by-reference

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

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


也许我在真正的问题上解释我的问题:

  1. 我有一个简单的班级City,其中包含天气数据等。
  2. 我将其保存在ListFragment并显示在那里。
  3. 我还有GoogleMap的片段,其中列出了天气列表中的城市。
  4. 如何将cities: List<City>存储在我的应用程序中?

3 个答案:

答案 0 :(得分:14)

  

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

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

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

答案 1 :(得分: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();

答案 2 :(得分:0)

请参阅:

Pass Object reference within Intent without implementing Serializable or Parcelable

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