我在Android特定组件方面不是很有经验,所以我无法到达我需要的位置。
我有三项活动:
1st获取有关某些对象组的信息,用户选择其中一些组,并且活动需要为下一个活动加注星标
第二个活动显示来自组的所有对象,用户在上一个活动中选择的用户,此处用户可以取消选择某些选定对象,然后活动开始3d活动
3d活动允许用户对所选对象执行某些操作
我的解决方案是制作一些单例模型,让活动获取并保存有关对象的信息,
但我认为,android有一些特殊的组件来提供活动之间的数据
帮我找到这个组件^请
答案 0 :(得分:6)
这取决于您要共享的数据类型:
原始数据类型
要在应用程序中的活动/服务之间共享原始数据,请使用Intent.putExtras()。要传递需要持久化的原始数据,请使用“首选项”存储机制。
非持久对象
为了在短时间内共享复杂的非持久性用户定义对象,建议采用以下方法:
android.app.Application类
android.app.Application是需要维护全局应用程序状态的人的基类。它可以通过getApplication()从任何Activity或Service访问。它有几个生命周期方法,如果您在AndroidManifest.xml中注册它,将自动由Android实例化。
公共静态字段/方法
跨活动/服务访问数据的另一种方法是使用公共静态字段和/或方法。您可以从应用程序中的任何其他类访问这些静态字段。要共享对象,创建对象的活动会设置一个静态字段以指向此对象,而任何其他想要使用此对象的活动只会访问此静态字段。
WeakReferences to Objects的HashMap
您还可以将WeakReferences的HashMap用于具有长键的对象。当活动想要将对象传递给另一个活动时,它只是将对象放入地图中,并通过意图附加功能将密钥(基于计数器或时间戳的唯一Long)发送给收件人活动。收件人活动使用此密钥检索对象。
单身人士课程
使用静态Singleton有一些优点,例如你可以在不将getApplication()强制转换为特定于应用程序的类的情况下引用它们,或者在所有Application子类上挂起接口的麻烦,以便各种模块可以参考那个界面。
但是,静电的生命周期并不在你的控制之下;为了遵守生命周期模型,应用程序类应该在Application类的onCreate()和onTerminate()方法中启动和拆除这些静态对象
持久对象
即使应用程序似乎继续运行,系统也可以选择终止其进程并在以后重新启动它。如果您需要将数据从一个活动调用持久存储到下一个活动调用,则需要将该数据表示为活动在被通知它可能消失时保存的状态。
对于共享复杂的持久性用户定义对象,建议采用以下方法:
如果需要在可以杀死应用程序进程的点之间保留共享数据,那么将该数据放在持久存储中,如Application Preferences,SQLite DB,Files或ContentProviders。
答案 1 :(得分:1)
是的,您可以使用Intents在活动之间发送数据。使用putExtra()
函数。如果要传递自己的对象,则需要实现Parcalable
类。
答案 2 :(得分:1)
使用单例在您的活动之间共享信息没有问题,特别是如果您需要这些数据在整个应用程序中保持一致。
或者,您可以使用Intent在活动之间传递数据 - putExtra()
。
答案 3 :(得分:1)
是的,它确实: http://www.remwebdevelopment.com/dev/a33/Passing-Bundles-Around-Activities.html
基本上,您可以发送Bundle
或仅使用putExtra
功能。
答案 4 :(得分: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")