正如标题所说,为什么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);
它只是启动活动A但不清除顶部。 -_-
我也尝试过使用setFlags()
。
我在SO上读到了关于这个问题的不同问题,但我找不到正确的答案。 > _<
有人请帮忙!
修改
@codeMagic要求的活动'A'中onBackPressed()的代码。
@Override
public void onBackPressed(){
if(wvLogin.canGoBack())
wvLogin.goBack();
else
super.onBackPressed();
}
答案 0 :(得分:37)
来自FLAG_ACTIVITY_CLEAR_TOP的文档:
如果设置,并且正在启动的活动已经在 当前任务,然后而不是启动它的新实例 活动,其上的所有其他活动将被关闭 这个意图将作为一个传递到(现在在顶部)旧活动 新的意图。
正如您在评论中添加的那样,活动A在呼叫B之前已经完成,因此这种情况不适用。将启动一个新的活动A实例。
在我看来,你有两个选择:
1)使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
标志。这将启动活动A作为堆栈的根。它可以工作,但堆栈中的任何其他活动都将丢失。假设A是第一个活动(或者至少,你对任务堆栈中的任何先前活动不感兴趣)那么它并不重要。 注意:CLEAR_TASK需要API级别11。
2)另一种可能的解决方案(如果先前的假设不成立)将完全不使用意图标志:
startActivityForResult()
启动C. B.afterActivityResult()
中,完成B并启动A. 答案 1 :(得分:3)
您使用了不同的意图:使用您初始化的意图:
Intent i = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); \\WRONG;;
startActivity(i);
<强>溶液强>
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); \\RIGHT;;
您可以将noHistory设置为清单
中的活动A.android:noHistory=true
答案 2 :(得分:3)
您错过了$where .= "WHERE (in_user_id = $user_id AND in_group = '0')
OR post_id IN (
SELECT post_id FROM posts_mentions
WHERE user_id = $user_id
)
";
标志
试试这个:
Intent.FLAG_ACTIVITY_SINGLE_TOP