Android,Intent.FLAG_ACTIVITY_CLEAR_TOP似乎不起作用?

Hes*_*sam 3 flags android android-intent

在我的菜单中,我有一些项目.Home是我希望成为我的应用程序的根目录的项目,每当用户点击它时,Android清除堆栈然后返回到主屏幕.

这是我的代码:

menu.setOnItemClickedListener(new MenuClickedListener() {
            public void eventOccured(int id) {          

                Intent intent = null;
                switch(id) {
                    case 1: intent = new Intent(context, More.class);           break;
                    case 2: intent = new Intent(context, FavoriteScreen.class); break;
                    case 3: intent = new Intent(context, VideoShowList.class);  break;
                    case 4: intent = new Intent(context, ShoppingList.class);   break;
                    case 5: intent = new Intent(context, MainScreen.class); 
                            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            break;                  
                }       

                if(intent != null)
                    context.startActivity(intent); 
            }
        });
Run Code Online (Sandbox Code Playgroud)

菜单工作正常,但似乎标志不起作用,因为从主屏幕,我去第二和第三屏幕然后我点击菜单的主页项目,并回到主屏幕.现在,当我点击后退按钮时,我会转到第三个屏幕,第二个屏幕和主屏幕.

我将此菜单设计为窗口小部件,以便将其设置一次并在我的所有屏幕上重复使用它.

任何建议,将不胜感激.谢谢.

Bha*_*han 20

我试过Intent.FLAG_ACTIVITY_CLEAR_TOP但是没有得到适当的解决方案,所以最终这对我有所帮助


Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);

这将清除所有堆栈并仅运行LoginActivity


Gau*_*ora 18

阅读一次,你将永远不会遇到使用flag_activity_clear_top的问题

以下是有关Flag_Activity_Clear_Top用法的简单说明.

适合使用的一种衬里配方:

它始终清除调用活动和被调用活动之间的中间活动(如果有).

这是一个活动流程:

活动A - >活动B - >活动C(使用标志活动清除​​顶部转到D) - >活动D.

在上述顺序中,如果我们按回到D,那么我们将得到活动C->活动B->活动A,因为活动C和活动D之间没有中间活动

这里的一些开发者的神话是 -

通过使用来自C的标记活动清除顶部到达活动D后,他们期望在按下来自D的后退键时将它们带到应用程序之外.这将永远不会发生.

Flag_Activity_Clear_Top始终清除两个活动之间的中间活动(如果有的话)

  • 很好的解释.如果你想把解决方案包括在每个人想要的东西中,那就更好了 - 让活动成为后面堆栈中剩下的唯一一个. (7认同)

Rah*_*tel 7

尝试使用这种intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);地质储量 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    Intent intent = new Intent(getApplicationContext(),
            yourActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    startActivity(intent);
Run Code Online (Sandbox Code Playgroud)