Завершить операцию при нажатии кнопки двойного нажатия?

Я создаю приложение здесь, мне нужно завершить работу, когда пользователь дважды нажал кнопку. Вот мой код, что я пробовал

@Override public void onBackPressed() { super.onBackPressed(); this.finish(); } 

Тоже пробовал

  @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { finish(); } return super.onKeyDown(keyCode, event); } 

Это помогает мне закончить активность после нажатия кнопки.

Pls мне нужно ваше предложение. заранее спасибо

Ок … вот более длинный, но эффективный способ сделать это …

1) Сделайте глобальный vairable в своем классе, как …

 private boolean backPressedToExitOnce = false; private Toast toast = null; 

2) Затем реализуем onBackPressed активности вроде этого …

 @Override public void onBackPressed() { if (backPressedToExitOnce) { super.onBackPressed(); } else { this.backPressedToExitOnce = true; showToast("Press again to exit"); new Handler().postDelayed(new Runnable() { @Override public void run() { backPressedToExitOnce = false; } }, 2000); } } 

3) Используйте этот трюк, чтобы эффективно справляться с этим тостом …

 /** * Created to make sure that you toast doesn't show miltiple times, if user pressed back * button more than once. * @param message Message to show on toast. */ private void showToast(String message) { if (this.toast == null) { // Create toast if found null, it would he the case of first call only this.toast = Toast.makeText(this, message, Toast.LENGTH_SHORT); } else if (this.toast.getView() == null) { // Toast not showing, so create new one this.toast = Toast.makeText(this, message, Toast.LENGTH_SHORT); } else { // Updating toast message is showing this.toast.setText(message); } // Showing toast finally this.toast.show(); } 

4) И используйте этот трюк, чтобы скрыть тост, когда ваша деятельность закрыта …

 /** * Kill the toast if showing. Supposed to call from onPause() of activity. * So that toast also get removed as activity goes to background, to improve * better app experiance for user */ private void killToast() { if (this.toast != null) { this.toast.cancel(); } } 

5) Реализуйте вас onPause () таким образом, чтобы убить тост без изменений, поскольку деятельность переходит на задний план

 @Override protected void onPause() { killToast(); super.onPause(); } 

Надеюсь, это поможет … 🙂

Я думаю, что это правильный способ – ждать второй секунды

 private boolean _doubleBackToExitPressedOnce = false; @Override public void onBackPressed() { Log.i(TAG, "onBackPressed--"); if (_doubleBackToExitPressedOnce) { super.onBackPressed(); return; } this._doubleBackToExitPressedOnce = true; Toast.makeText(this, "Press again to quit", Toast.LENGTH_SHORT).show(); new Handler().postDelayed(new Runnable() { @Override public void run() { _doubleBackToExitPressedOnce = false; } }, 2000); } 

Это работает для меня … ответ отсюда

Используйте boolean, чтобы проверить, нажата ли кнопка дважды

 boolean isFinsihActivity = false; @Override public void onBackPressed() { if (isFinsihActivity) { super.onBackPressed(); } isFinsihActivity = true; } 

Ведение глобальной переменной в вашей Activity

 private int count; 

Override onBackPressed в вашей деятельности.

 @Override public void onBackPressed() { if (count == 1) { super.onBackPressed(); } count++; } 

Попробуйте как инициализировать статическую переменную int с 0 и прирастить переменную внутри onBackPressed () и проверить ее значение be 2;

 public class MainActivity extends Activity { static int i=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onBackPressed(){ i++; if(i==2){ finish(); } } 

Сделайте это примерно так:

 int counter=0; @Override public void onBackPressed() { super.onBackPressed(); counter+=1; if(counter==2){ this.finish();} } 

То, что я сделал бы, это использовать временную метку для первого обратного щелчка, и если это произойдет снова в течение срока, я бы закончил.

 long mtimeOfFirstClick long TIME_LIMIT = 0.5 DateUtils.SECONDS_IN_MILLIS; public void onBackPressed() { if(System.currentTimeMillis() - mtimeOfFirstClick <= TIME_LIMIT) { finish(); } else { mtimeOfFirstClick = System.currentTimeMillis(); } }