启动新活动并清除除家庭活动外的先前活动
Posted
技术标签:
【中文标题】启动新活动并清除除家庭活动外的先前活动【英文标题】:Launch new activity and clear previous activities except home activity 【发布时间】:2016-02-02 23:09:24 【问题描述】:我在下面启动了一系列活动:
首页活动->第二个活动->第三个活动->第四个活动
我想要实现的是,当第 3 个活动启动第 4 个活动时,它会从后台堆栈中清除活动 2 和 3。因此,单击第 4 个活动返回到主活动
即用户应该仍然可以从第 3 个活动返回到第 2 个,但是一旦第 4 个活动启动,活动 2 和 3 就会被移除。
实现这一点的配置是什么?
【问题讨论】:
【参考方案1】:听起来你想CLEAR_TOP。
试试这个:
Intent i = new Intent(this, HomeActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
【讨论】:
谢谢.. 你是说,我应该覆盖后退按钮,以便它使用此配置调用启动活动? 是的,假设该屏幕的后退按钮的目标。【参考方案2】:您可以在第二个和第三个活动中注册BroadCastReceiver
,该活动在其onReceive()
实现中具有finish()
。
在启动 4th Activity 时触发广播。
如果它正常工作,将相同的广播实现移动到BaseClass
并添加一个布尔检查来注册广播与否。
如果你正在使用片段,你可以尝试
getFragmentManager().popBackStack("tag_of_fragment_to_pop", 0);
【讨论】:
我想这会起作用,但听起来有点“hacky”想知道是否有一些配置可以与意图标志一起使用。 据我记忆,i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);仅当您在清除所有中间活动并可能调用 onNewIntent() 的第三个活动之后再次启动第一个活动时才有效。我使用 Broadast 接收器方法来实现完美运行的“注销”。【参考方案3】:我认为最简单的方法是使用这样的东西:
Intent homeActivityIntent = new Intent(fourth.this,
home.class);
homeActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
homeActivityIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(homeActivityIntent);
【讨论】:
谢谢.. 你是说,我应该覆盖后退按钮,以便它使用此配置调用启动活动? 是的,如果这是用户返回活动 1 的唯一途径。【参考方案4】:尽管所有答案都很有用,而且我只有 2 项活动想要结束,但我还是这样做了:
startActivityForResult()
活动 2
在 Activity 3 上成功启动 Activity 4 后,我在 Activity 3 上调用 finish()
之前设置了 RESULT_OK
。
在 Activity 2 中,我在 onActivityResult()
处理成功结果,这样我知道 Activity 4 已经启动,所以我可以完成 Activity 2。
因此,Activity 2 和 3 在启动 Activity 4 时都关闭。
【讨论】:
以上是关于启动新活动并清除除家庭活动外的先前活动的主要内容,如果未能解决你的问题,请参考以下文章