正如标题所说,为什么intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
or intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
行不通?
我有 3 项活动,比如说 A、B 和 C。
当我尝试使用代码从 C 启动 Activity A 时:
Intent i = new Intent(this, A.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
它只是启动 Activity A 但不会清除顶部。! -_-
我也尝试过使用setFlags()
.
我阅读了有关此问题的不同问题,但找不到正确的答案。 >_
有人请帮忙!
Edit
根据 @codeMagic 的要求,活动“A”中的 onBackPressed() 代码。
@Override
public void onBackPressed(){
if(wvLogin.canGoBack())
wvLogin.goBack();
else
super.onBackPressed();
}
从文档中FLAG_ACTIVITY_CLEAR_TOP http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP:
If set, 并且正在启动的活动已经在运行
当前任务,然后不要启动该实例的新实例
活动,其上的所有其他活动都将关闭并且
这个意图将作为一个传递给(现在在顶部)旧的活动
新意图。
正如您在评论中添加的,活动 A 在调用 B 之前已经完成,因此这种情况不适用。相反,将启动活动 A 的新实例。
在我看来,你有两个选择:
1)使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
旗帜。这将启动活动 A 作为堆栈的根。它可以工作,但堆栈中的任何其他活动都将丢失。假设 A 是第一个活动(或者至少,您对任务堆栈中的任何先前活动都不感兴趣),那么这并不重要。注意:CLEAR_TASK 需要 API 级别 11。
2)另一种可能的解决方案(如果前面的假设不成立)是根本不使用意图标志:
- B 以 C 开头
startActivityForResult()
.
- C 没有调用 A,而是完成了操作,并为 B 设置了一个结果,指示必须启动 A。
- In
B.afterActivityResult()
,完成B并启动A。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)