ash*_*shu 15 android android-intent android-activity
正如标题所说,为什么intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)或intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)不会有效?
我有3个活动让我们说A,B和C.
当我尝试使用代码从C启动活动A时:
Intent i = new Intent(this, A.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
它只是启动活动A但不清除顶部.-_-
我也试过用setFlags().
我在这个问题上阅读了关于SO的不同问题,但我找不到正确的答案.> _ <
有人请帮忙!
编辑
@codeMagic请求的活动'A'中onBackPressed()的代码.
@Override
public void onBackPressed(){
if(wvLogin.canGoBack())
wvLogin.goBack();
else
super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)
mat*_*ash 39
如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在开启) top)旧活动作为新的意图.
正如您在评论中添加的那样,活动A在呼叫B之前已经完成,因此这种情况不适用.将启动一个新的活动A实例.
在我看来,你有两个选择:
1)使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK标志.这将启动活动A作为堆栈的根.它可以工作,但堆栈中的任何其他活动都将丢失.假设A是第一个活动(或者至少,你对任务堆栈中的任何先前活动不感兴趣)那么它并不重要.注意:CLEAR_TASK需要API级别11.
2)另一种可能的解决方案(如果先前的假设不成立)将是根本不使用意图标志:
startActivityForResult().B.afterActivityResult(),完成B并启动A.您使用了不同的意图:使用您初始化的意图:
Intent i = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); \\WRONG;;
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
解决方案:
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); \\RIGHT;;
Run Code Online (Sandbox Code Playgroud)
您可以将 noHistory true 设置为清单中的 Activity A
android:noHistory=true
Run Code Online (Sandbox Code Playgroud)
你错过了Intent.FLAG_ACTIVITY_SINGLE_TOP旗帜
尝试这个:
Intent i = new Intent(this, A.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45921 次 |
| 最近记录: |