禁用之前活动的后退按钮,但双击

时间:2017-10-17 18:37:07

标签: android back

有没有办法在活动中禁用后退按钮(以防止显示以前的活动),但是当你双击它时,用它来退出? 我使用我发现的这个代码,但它只是第二部分。双击关闭应用程序..

我试图做的,也是阻止返回并显示上次访问的活动。谢谢。

boolean doubleBackToExitPressedOnce = false;

@Override
public void onBackPressed() {

    if (doubleBackToExitPressedOnce) {
        super.onBackPressed();
        return;
    }

    this.doubleBackToExitPressedOnce = true;
    Toast.makeText(this, "Press again back for exit", Toast.LENGTH_SHORT).show();

    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
            doubleBackToExitPressedOnce=false;
        }
    }, 2000);

}

更新

我会根据您的建议进行更改,但现在,它会显示所有以前访问过的活动的双重回复。

static final long THRESHOLD = 2000;
long backLastPressed;

boolean doubleBackToExitPressedOnce = false;

@Override
public void onBackPressed() {
    if (System.currentTimeMillis() - backLastPressed < THRESHOLD) {
        if (doubleBackToExitPressedOnce) {
            super.onBackPressed();
            return;
        }

        this.doubleBackToExitPressedOnce = true;
        Toast.makeText(this, "Press again back for exit", Toast.LENGTH_SHORT).show();

        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                doubleBackToExitPressedOnce=false;
            }
        }, 2000);
        backLastPressed = 0;
        return;
    }
    backLastPressed = System.currentTimeMillis();
    // Otherwise, ignore this BACK press
}

4 个答案:

答案 0 :(得分:0)

您可以存储一个内部变量,用于标记按下BACK按钮的时间。每次在onBackPressed中检查现在的时间是否在您的双击阈值范围内,如果是,请将其注册为双击。

尝试这样的事情:

static final long THRESHOLD = 2000;
long backLastPressed = 0;

@Override
public void onBackPressed() {
    if (System.currentTimeMillis() - backLastPressed < THRESHOLD) {
        // TODO: Register double-tapped BACK button, put your "exit" code here
        backLastPressed = 0;
        return;
    }
    backLastPressed = System.currentTimeMillis();
    // Otherwise, ignore this BACK press
}

如果您试图覆盖BACK按钮行为,请不要致电super.onBackPressed()

答案 1 :(得分:0)

我仍然没有评论的声誉。

为了防止访问之前的活动,您可以在双击后退按钮时执行某些操作,还可以在输入此活动时清除任务。

本指南介绍了如何实现这一目标:https://developer.android.com/guide/components/activities/tasks-and-back-stack.html

TL; DR:在意图中使用标志来清除活动堆栈。

意图:

Init()

答案 2 :(得分:0)

您可以尝试我的代码:

private static long back_press;

@Override
public void onBackPressed() {

    if (back_press + 2000 > System.currentTimeMillis()) {
        super.onBackPressed();      

    } else {
        Toast.makeText(getBaseContext(), "Please press again to exit!",
                Toast.LENGTH_SHORT).show();
        back_press = System.currentTimeMillis();
    }

}

它对我有用,我希望它能帮助你。

答案 3 :(得分:0)

请查看此示例应用:https://github.com/IvanShafran/android-stackoverflow/tree/master/BackButtonHandle

要点是:

private boolean mIsBackButtonPressedBefore = false

@Override
public void onBackPressed() {
    if (mIsBackButtonPressedBefore) {
        Toast.makeText(this, "Second back button press", Toast.LENGTH_SHORT).show();
        super.onBackPressed();
    } else {
        mIsBackButtonPressedBefore = true;
        Toast.makeText(this, "First back button press", Toast.LENGTH_SHORT).show();
    }
}

它描述了行为,您可以在下面的gif中看到:enter image description here

如果您的代码与此类似但不起作用,则应查找此范围之外的问题。