为什么FLAG_ACTIVITY_CLEAR_TOP不起作用?

时间:2014-05-18 03:45:07

标签: 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);

它只是启动活动A但不清除顶部。 -_-

我也尝试过使用setFlags()

我在SO上读到了关于这个问题的不同问题,但我找不到正确的答案。 > _<

有人请帮忙!

修改

@codeMagic要求的活动'A'中onBackPressed()的代码。

@Override
public void onBackPressed(){
    if(wvLogin.canGoBack())
        wvLogin.goBack();
    else
        super.onBackPressed();
}

3 个答案:

答案 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)另一种可能的解决方案(如果先前的假设不成立)将完全不使用意图标志:

  • B以startActivityForResult()启动C.
  • 没有调用A,C完成,为B设置了一个结果,表明必须启动A.
  • 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