注销时,清除活动历史记录堆栈,阻止“后退”按钮打开上一个活动

时间:2011-10-04 05:21:22

标签: android android-intent

我正在制作一个我需要注销的Android应用程序。我已经实现了注销功能,但问题是当我点击后退按钮时。之前的活动开始了。

我尝试通过将其Intent标志设置为FLAG_ACTIVITY_CLEAR_TOP来打开Login活动,这似乎是在文档中概述的,但是没有实现我将Login活动放在历史堆栈底部并防止用户导航回以前看到的登录活动。我也尝试使用android:launchMode =“singleTop”作为清单中的Login活动,但这也没有实现我的目标(并且似乎没有任何影响)。

我正在使用以下代码:

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();


            }
        };

3 个答案:

答案 0 :(得分:1)

你可以使用 Intent.FLAG_ACTIVITY_NO_HISTORY

或在Manifest中定义活动

android:noHistory = true

我遇到了同样的问题..我使用了这些并解决了我的目的

然而,我不知道你的App流程。所以不能确定这对你有用..但是你可以尝试一下。

答案 1 :(得分:0)

当您按下后退按钮时,会发生事件。所以你要做的是通过像这样的onKeyDown()方法处理那个事件--->

public boolean onKeyDown(int key,KeyEvent event){

开关(event.getAction()){ case KeyEvent.KEYCODE_BACK: 在这里做点什么或者显示一些消息 打破; } 返回true; }

答案 2 :(得分:0)

尝试:

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);

...