按两次退出不工作的活动



我需要关闭一个活动,并开始另一个只有当用户按回两次。我正在使用这个代码

@Override
public void onBackPressed() {
    if (doubleBackToExitPressedOnce) {
        Log.e("Entering","Yes");
        DatabaseHandler db=new DatabaseHandler(AddBreakfastActivity.this);
        db.deleteTodaysUnsavedMenu(Integer.parseInt(newDay),Integer.parseInt(newIntMonth));
        Intent intent=new Intent(AddBreakfastActivity.this,ProvidersUpdateActivity.class);
        startActivity(intent);
        finish();
    }
    else {
        this.doubleBackToExitPressedOnce = true;
        Log.e("BOOLEANVALUE", String.valueOf(doubleBackToExitPressedOnce));
        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);
    }
}

一旦应用程序退出并显示Toast消息,按回。它不需要等待第二次按压。我该如何解决这个问题?谢谢你。

编辑

当按下后退键时,发现它按预期工作。但是,当从

调用时显示上述问题
 public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if(id==android.R.id.home){
            onBackPressed();
        }
}

你也可以在keydown事件上这样做,如下面的代码remove backpressed

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(event.getAction()==KeyEvent.ACTION_DOWN && keyCode==KeyEvent.KEYCODE_BACK)
        {
            if (doubleBackToExitPressedOnce) {
                Log.e("Entering","Yes");
                DatabaseHandler db=new DatabaseHandler(AddBreakfastActivity.this);
                db.deleteTodaysUnsavedMenu(Integer.parseInt(newDay),Integer.parseInt(newIntMonth));
                Intent intent=new Intent(AddBreakfastActivity.this,ProvidersUpdateActivity.class);
                startActivity(intent);
                finish();
            }
            else {
                this.doubleBackToExitPressedOnce = true;
                Log.e("BOOLEANVALUE", String.valueOf(doubleBackToExitPressedOnce));
                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);
                return false;
        }
}
        return super.onKeyDown(keyCode, event);
    }

下面是一个带有片段的"Press Twice to Exit"示例:

boolean doublePressToQuit = false;    
@Override
        public void onBackPressed() {
            if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
                getSupportFragmentManager().popBackStack();
            } else {
                if (doublePressToQuit) {
                    DashBoardActivity.this.finish();
                } else {
                    this.doublePressToQuit = true;
                    Toast.makeText(this, getString(R.string.quit_notification), Toast.LENGTH_SHORT).show();
                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            doublePressToQuit = false;
                        }
                    }, 2000);
                }
            }
        }

在您的IF语句中包含super.onBackPressed();以覆盖onBackPressed()事件

试试下面的代码,它可以为我工作

boolean firstBackPressed = false;
.
.
.
@Override
    public void onBackPressed() {
        if (!firstBackPressed) {
            firstBackPressed = true;
            Toast.makeText(MainMenu.this, "Press back again to exit", Toast.LENGTH_SHORT).show();
        } else {
            super.onBackPressed();
        }
    }

请查看

  private boolean isShownExit;
 @Override
    public void onBackPressed() {
        if (drawerLayout.isDrawerOpen(Gravity.LEFT)) {
            drawerLayout.closeDrawer(Gravity.LEFT);
            isShownExit = false;
            return;
        } else {
            if (getSupportFragmentManager().getBackStackEntryCount() == 1) {              
                    if (!isShownExit) {
                        isShownExit = true;
                        showToast(this, "Press again to exit");
                    } else {
                        hideSoftKeyboardDialogDismiss(this);
                        startAnotherActivityHereWhichDoYouwant();
                }
            } else {
               getSupportFragmentManager().popBackStack();
            }
        }
    }

相关内容

最新更新