有没有办法在活动中禁用后退按钮(以防止显示以前的活动),但是当你双击它时,用它来退出? 我使用我发现的这个代码,但它只是第二部分。双击关闭应用程序..
我试图做的,也是阻止返回并显示上次访问的活动。谢谢。
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
}
答案 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();
}
}
如果您的代码与此类似但不起作用,则应查找此范围之外的问题。