2015-01-29 1 views
0

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

private long lastPressedTime; 
private static final int PERIOD = 2000; 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
    switch (event.getAction()) { 
    case KeyEvent.ACTION_DOWN: 
     if (event.getDownTime() - lastPressedTime < PERIOD) { 
      finish(); 
     } else { 
      Toast.makeText(getApplicationContext(), "Press again to exit.", 
        Toast.LENGTH_SHORT).show(); 
      lastPressedTime = event.getEventTime(); 
     } 
     return true; 
    } 
} 
return false; 
} 

, пожалуйста, назовите меня, как реализовать это в приложении.

ответ

0

Удалите реализацию внутри OnKeyDown и попробовать этот код

@Override 
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); 
} 
+0

Теперь получаю эту ошибку «Метод onBackPressed() не определено для типа фрагмента» –

+0

Declare onBackPressed() в вашей деятельности! – goonerDroid

0
@Override 
public void onBackPressed() {} 

в вашей деятельности, поскольку деятельность отвечает за обработку назад кнопки

Посмотрите на this вопрос, он не получил принятый ответ , но содержат некоторые решения

0

попробуйте следующее:

private boolean doubleBackToExitPressedOnce; 

@Override 
public void onBackPressed() { 
    Log.i(tag, "Start: On Back Pressed!"); 

    if (doubleBackToExitPressedOnce) { 
     Log.i(tag, "Double Back Pressed!"); 

     super.onBackPressed(); 
     return; 
    } 
    doubleBackToExitPressedOnce = true; 
    Toast.makeText(this, R.string.msg_exit, Toast.LENGTH_SHORT).show(); 

    Timer t = new Timer(); 
    t.schedule(new TimerTask() { 

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

} 

не забудьте добавить эту строку в onResume:

@Override 
protected void onResume() { 
    doubleBackToExitPressedOnce = false; 
} 
+1

Убедитесь, что вы вставляете его в класс активности, а не в фрагмент –

+0

of the course yes @KirillShalnov –