2011-01-28 25 views
1

我对android特定组件并不是非常有经验,所以我无法获得需要查看的位置。在三个活动中使用相同的数据

我有三个活动:

1日得到有关对象的某些群体的信息,用户选择一些这个群体和活动需要明星下一个活动

第二届活动表示从组中的所有对象,用户选择在以前的活动,在这里用户可以取消某些选定的对象,然后活动开始3D活动

3D活动允许用户做一些与所选对象

我的解决方法是MAK Ë一些单模式,即让活动获取和保存有关对象的信息,

但我想,这Android有一些特殊的组件来提供活动之间的数据

帮我找到这个组件^请

回答

1

是的,你可以使用Intents在活动之间发送数据。使用putExtra()函数。如果你想传递你自己的对象,你需要实现Parcalable类。

6

这取决于你想分享的数据类型:

基本数据类型
要在应用程序共享活动/服务之间的基本数据,使用Intent.putExtras()。要传递需要保持的原始数据,请使用首选项存储机制。

非持久对象
对于共享对于短持续时间复杂非持久用户定义的对象,以下方法被建议:

的android.app.Application类

的android.app.Application是需要维护全局应用程序状态的基类。它可以通过getApplication()从任何Activity或Service进行访问。它有几个生命周期方法,如果你在AndroidManifest.xml中注册,它会自动实例化。

公共静态字段/方法

的另一种方法,使整个活动/服务数据访问是使用公共静态字段和/或方法。您可以从应用程序中的任何其他类访问这些静态字段。为了共享一个对象,创建对象的活动将一个静态字段设置为指向该对象,并且任何其他想要使用此对象的活动都将访问此静态字段。

一个HashMap在WeakReferences到对象

您还可以使用在WeakReferences的一个HashMap与长密钥对象。当一个活动想要将一个对象传递给另一个活动时,它只需将该对象放入地图中,并通过意向附加功能将该密钥(基于计数器或时间戳的唯一Long)发送给接收者活动。收件人活动使用此密钥检索对象。

一个单独的类

有使用静态辛格尔顿的优点,如可以参考他们没有铸造getApplication()到应用程序特定的类,或去挂一个接口的麻烦在你的所有应用程序子类中,以便你的各个模块可以引用该接口。

但是,静态的生命周期并不完全在你的控制之下;所以由生命周期模型遵守,应用程序类应该即使在出现一个应用程序启动,并在OnCreate()和onTerminate拆除这些静态对象()应用程序类的方法

持久对象
要继续运行,系统可能会选择终止其进程并稍后重新启动。如果您需要将数据从一个活动调用持续到下一个活动,则需要将该数据表示为活动保存的状态,通知该活动可能会消失。

对于共享复杂持久用户定义的对象,下面的方法被建议:

  • 应用程序首
  • 文件
  • contentProviders
  • SQLite的DB

如果共享数据需要保留在应用程序可以被杀死的地方,然后放置t数据存储在持久性存储中,如Application Preferences,SQLite DB,Files或ContentProviders。

+0

” ......因此受到生命周期模型遵守,应用程序类应该开展并在OnCreate()和onTerminate推倒这些静态对象()方法应用程序类“ - 我同意这篇文章的其余部分,但觉得我应该指出onTerminate()方法从来不会在实际设备上引用(引用Android参考):”此方法用于仿真过程在生产型Android设备上永远不会调用它,在这种设备中,只需简单地删除进程即可删除进程;执行此操作时不会执行用户代码(包括此回调函数)。“ – DuneCat 2012-01-02 14:51:03

1

使用单例在您的活动之间共享信息没有问题,特别是如果您需要此数据在整个应用程序中保持一致。

或者,您可以使用意图在活动之间传递数据 - putExtra()

+0

我认为通过intent的额外 – earsonheart 2011-01-28 12:01:01

1

尝试这种方式,请

Intent i = new Intent(this, YourTragetedActivity.class); 

    i.putExtra("value1", "test1"); 
    i.putExtra("value2", "test2"); 

    startActivity(i); 


    //// On Your TragetedActivity 

    getIntent().getStringExtra("value1") 
    getIntent().getStringExtra("value2") 
相关问题