我知道在活动之间传递对象的简单机制。
我通常使用Bundle
和putParcelable()
或者放置Serializable()
,但我知道它实际上是通过打包和解包对象来传递原始数据,而不保留引用。
但现在我的问题不同了 - 我需要传递一些服务和其他活动的参考。有没有办法做到这一点?
也许我在真正的问题上解释我的问题:
City
,其中包含天气数据等。ListFragment
并显示在那里。GoogleMap
的片段,其中列出了天气列表中的城市。如何将cities: List<City>
存储在我的应用程序中?
答案 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
您无法跨进程传递对象的引用。正如马克指出的那样,你可以做很多功能相似的东西。但是,你的问题的答案是“不”