在注销时,清除活动历史堆栈,防止“后退”按钮从最后打开活动

问题描述:

我正在制作一个需要注销的Android应用程序。我已经实现了注销功能,但问题出在我点击后退按钮时。之前的活动开始。在注销时,清除活动历史堆栈,防止“后退”按钮从最后打开活动

我已经尝试通过将其Intent标志设置为FLAG_ACTIVITY_CLEAR_TOP来打开登录活动,这似乎是按照文档中概述的方式执行的,但没有实现我将Login活动放置在历史堆栈底部的目标,并且防止用户导航回到之前看到的登录活动。我也尝试在清单中使用android:launchMode =“singleTop”作为登录活动,但是这也不能完成我的目标(并且似乎无论如何都没有效果)。

我使用的follpowing代码:

private OnClickListener clickLogoutListener = new OnClickListener() { 
      public void onClick(View v) 
      { 
       AlertDialog.Builder builder = new AlertDialog.Builder(HomePage.this); 
        AlertDialog alertDialog = builder.create(); 


      alertDialog.setMessage("Do you want to logout??"); 
      alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, 
           int whichButton) { 
          Intent intent1 = new Intent(getApplicationContext(), Login.class); 
          //intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
          intent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
          startActivity(intent1); 
          finish(); 
         } 

        }); 

      alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "No", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, 
           int whichButton) { 
         } 
        }); 
      alertDialog.show(); 


      } 
     }; 
+0

我回答同样的问题http://*.com/questions/7635060/how-to-clear-activity-stack-on-button -click-in-android/7635220#7635220 – ingsaurabh

可以使用Intent.FLAG_ACTIVITY_NO_HISTORY

或在清单定义活动

机器人:noHistory =真

我面临同样的问题..我使用这些和这解决了我的目的

但是,我不知道你的应用程序流量..所以不能确定这会对你有用..但你可以试试看。

+0

我应该在所有活动中定义这个吗? – ekjyot

+0

是的肯定..当你打电话的意图,你不想回到那个新的屏幕,一旦你完成然后通过国旗..或者你肯定从宣布的时候,然后在清单 – MKJParekh

当您按下按钮时发生事件。所以,你要做的就是通过onkeydown事件处理该事件()方法是这样--->

公共布尔的onkeydown(INT键,KeyEvent的事件){

开关(event.getAction()){ 情况下的KeyEvent .KEYCODE_BACK: 在这里做些什么或显示一些消息 break; } return true; }

尝试:

Intent intent = new Intent(this, LoginActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_CLEAR_TOP); 

...