Android:导航到堆栈中的第一个MainActivity

时间:2015-02-16 07:06:57

标签: android navigation

默认情况下,当用户导航回来时,Android会创建新的Activity实例并将其关闭。这就是堆栈。

尝试使用与launchMode不同的standard时,我们发现在某些设备上启动这些活动时会出现不需要的动画。

在我们的应用程序中,有搜索,按类别查看,相关和最终详细信息, 这可以将用户带到厚厚的堆栈。

是否有简单的方法可以添加操作“返回主页”,将所有堆栈丢弃到MainActivity?

3 个答案:

答案 0 :(得分:3)

是的,在您的家庭活动中启动一个新的Intent,如下所示:

Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
overridePendingTransition(R.anim.fade);
finish();

使用该标志,您可以清理堆叠,而HomeActivity现在是您应用的主要活动。

答案 1 :(得分:1)

找到Go back to the First/Main activity without reloading it

Intent i = new Intent(this, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);

来自docs

  

例如,考虑一个由活动组成的任务:A,B,C,D。如果D调用带有解析为活动B组件的Intent的startActivity(),那么C和D将完成并且B接收给定的Intent,导致堆栈现在为:A,B。

     

上面示例中当前运行的活动B实例将在其onNewIntent()方法中接收您从此处开始的新意图,或者本身已完成并使用新意图重新启动。如果它已宣布其启动模式为"多个" (默认值)并且您没有在同一意图中设置FLAG_ACTIVITY_SINGLE_TOP,然后它将被完成并重新创建;对于所有其他启动模式或者如果设置了FLAG_ACTIVITY_SINGLE_TOP,则此Intent将被传递到当前实例的onNewIntent()。

因此,如果没有FLAG_ACTIVITY_SINGLE_TOP,它将导致重新创建MainActivity。

答案 2 :(得分:0)

是的,在您的家庭活动中启动一个新的Intent,如下所示:

Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
overridePendingTransition(R.anim.fade)
finish();

使用该标志,您可以清理堆叠,而HomeActivity现在是您应用的主要活动。