单击两次后退按钮时关闭应用程序

时间:2016-02-12 17:46:19

标签: java android button

我的活动流程看起来像这样

compositionComplete (gets called here too, when a route is first visited)
attached
compositionComplete

单击C中的按钮时,它将打算使用A.

当按下A中的后退按钮两次时,它应关闭应用程序。

LogIn Activity-> Activity A(Main Page)->Activity B-> Activity C

问题:

  

当我按下按钮一次时,它会显示 boolean doubleBackToExitPressedOnce = false; public void onBackPressed(){ if(doubleBackToExitPressedOnce) { super.onBackPressed(); return; } this.doubleBackToExitPressedOnce = true; Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show(); new Handler().postDelayed(new Runnable() { @Override public void run() { doubleBackToExitPressedOnce = false; Intent a = new Intent(Intent.ACTION_MAIN); // close app code a.addCategory(Intent.CATEGORY_HOME); a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(a); } },2000); ,然后它会自动关闭应用程序,即使我   没两次点击按钮。

     

如果我单击按钮两次,它将返回LogIn Activity。什么是   正确的写作方式?感谢

修改

如果我删除Please click BACK again to exit

intent

双击后退按钮时,它将再次返回活动C.

3 个答案:

答案 0 :(得分:1)

也许只需使用long lastTimePressed=0L;并在其中存储System.currentTimeMillis();if(System.currentTimeMillis()-lastTimePressed>2000) finish();

2000表示Toast.Length_SHORT,3500表示Toast.LENGTH_LONG

long lastTimePressed=0L;

@Override
public void onBackPressed (){
    if(System.currentTimeMillis()-lastTimePressed>2000) //short Toast duration, now should be faded out
        finish();
    else
        Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

    lastTimePressed=System.currentTimeMillis();
}

不要开始新的Activity(或者可能?如果您已实施singleTasksingleTopnoHistory,但我对此表示怀疑。 finish();super.onBackPressed();执行相同的操作。覆盖onBackPressed的可能性稍后会在API5中添加,因为它非常有用:)

哦,现在我看到你的编辑,一切都很清楚。不要使用startActivity开始您的活动,但使用startActivityForResult。同时实施onActivityResultcheck out here)。当你使用

private static final int MY_RESULT_IS_KILL_MY_APP=4573; //random

setResult(MY_RESULT_IS_KILL_MY_APP);
finish();
下面的

Activity会在自己的onActivityResult中收到它,也应该设置此结果并调用finish();。这样,活动堆栈就会被清除,整个Application都会退出。如果不设置此静态结果,finish();将仅完成当前Activity

答案 1 :(得分:0)

完成LogIn活动在打开活动A.之前就是它。

new

答案 2 :(得分:0)

@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
    super.onBackPressed();
    return;
}

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

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

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