2013-04-30 54 views
0

我在我的应用程序中有3个活动。如何启动这种情况下的活动?

首页 - >列表 - >详细

当我在详细的活动,我想有一个家按钮,将我重定向到家庭活动,并关闭其他活动。然后,我试过这段代码:

Intent intent = new Intent(this, HomeActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

因为FLAG_ACTIVITY_CLEAR_TOP是:

如果设置,以及正在启动的活动已经在 当前任务运行,然后,而不是推出的一个新实例即 活动,其上的所有其他活动将关闭,并且 此Intent将作为 新Intent递送到(现在在上面)旧活动。

我得到了我想要的,但它仍然会onCreate。有没有办法启动家庭,而不是去onCreate?

+0

哇,对不起,我错过了这个选项,在AndroidManifest.xml中的Activity中声明'android:launchMode =“singleTask'。我将删除这个问题 – Rendy 2013-04-30 15:05:34

+0

通过使用上面的代码,你只需创建一个新的主页 - 在现有的细节活动之上的活动,而不是那个,试着完成(调用finish()on)Detail-Activity和List-Activity,以使主页活动变得可见 – prageeth 2013-04-30 15:05:52

+1

对于任何对android:launchMode = “singleTask”呢,我引用它的文档http://developer.android.com/guide/topics/manifest/activity-element.html“系统在新任务的根目录创建活动并将意图路由到但是,如果活动的一个实例已经存在,则系统通过调用onNewIntent()方法将意图路由到现有实例,而不是创建新实例。“ – Rendy 2013-04-30 15:10:41

回答

0

您无法控制Activity的生命周期。这取决于Android决定继续运行哪些活动以及关闭哪些活动。这意味着当一个活动失去焦点时,它不一定被销毁或关闭,但可能只是失去焦点并继续运行,但也可能不会。这取决于Android;你无法控制这种行为。

如果要在给定状态下恢复Activity,则必须保存所有需要的数据并将其恢复到onCreate()

+0

是的,我们无法控制活动的生命周期,但实际上我们可以做到。请看我上面的评论,我想念这个选项'android:launchMode =“singleTask' :) – Rendy 2013-04-30 15:14:26

1

你的想法和Android的还不完全兼容。 ;)

当你“启动家庭”,这意味着它将是推出,这意味着它将被创建。

但是,您可以使用Activity.startActivityForResult()开始ListDetail。您的“家”按钮,然后将finish您的Detail活动。在ListonActivityResult回调中,您只需要通过使用Activity.finish()onActivityResultHome就可以了解事件并知道您现在回来了。

+0

Hi Class Stacker,实际上有办法做到这一点,请看我对我的问题的评论。 launchMode =“singleTask” – Rendy 2013-04-30 15:13:27

+0

@Rendy当然。我无法想象这种方法有助于逻辑。有一个与逻辑匹配的控制流通常是一个好主意。因为这样,您的“主页”按钮与“返回”按钮相反。除非你的逻辑非常微不足道,否则实现起来并不好玩,即使如此,我也不会这样做,因为它是违反直觉的。此外,还有其他情况下,您的应用程序将收到一个新的“家”意图,并希望能够区分它们。所以,不要像你认为应该这样做。 – 2013-04-30 15:20:08

+0

这是因为我正在考虑实际上我在家庭活动中使用了很多图片,我不想重新加载它,实际上我没有需要刷新的视图。感谢您的提醒:) – Rendy 2013-04-30 15:23:34