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

标签 java android button

我的 Activity 流程如下所示

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

当点击C中的按钮时,它会指向A。

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

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

问题:

when I press the button one times, it will display Please click BACK again to exit, and then it will close the app automatically even I didn't clicked the button twice.

If I click the button twice, it will back to LogIn Activity. What is the correct way to write ? Thanks

编辑

如果我删除 Intent

 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;

            }
        },2000);


    }

双击后退按钮,将再次返回到Activity C。

最佳答案

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

Toast.Length_SHORT 为 2000,Toast.LENGTH_LONG 为 3500

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(); 实际上执行相同的操作。稍后在 API5 中添加了覆盖 onBackPressed 的可能性,因为它非常有用:)

哦,现在我看到了你的编辑,一切都清楚了。不要使用 startActivity 启动您的 Activity,而应使用 startActivityForResult。还实现 onActivityResult ( check 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();。这样, Activity 堆栈就会被清除,整个应用程序将退出。如果不设置此静态结果 finish(); 将仅完成当前 Activity

关于java - 单击后退按钮两次时关闭应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35369028/

相关文章:

java - 关闭 Android 应用程序后丢失数据

android - flutter 执行方法只要按下按钮

android - 自定义 Facebook 登录按钮

ios - 动画 map 到位置不工作谷歌地图 iOS

java - Android - Java - 单击按钮时保存字符串

java - 无法在 Spring RestController 中调用 REST 服务

android - FileObserver 不起作用

java - 根据主机名加载 Bean

java - 关于ImageIcons的方法不起作用

java - Realm findAllSorted by field of a filed