默认情况下,当用户导航回来时,Android会创建新的Activity实例并将其关闭。这就是堆栈。
尝试使用与launchMode
不同的standard
时,我们发现在某些设备上启动这些活动时会出现不需要的动画。
在我们的应用程序中,有搜索,按类别查看,相关和最终详细信息, 这可以将用户带到厚厚的堆栈。
是否有简单的方法可以添加操作“返回主页”,将所有堆栈丢弃到MainActivity?
答案 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现在是您应用的主要活动。