Sudheesh B Nair'in güzel (ve kabul edilmiş) bir cevabı var, ki bence daha iyi bir alternatif olmalı;
Geçen zamanı ölçmek ve TIME_INTERVAL
milisaniyelerin (diyelim 2000) son geri basıştan bu yana geçip geçmediğini kontrol etmek yanlış . Aşağıdaki örnek kod System.currentTimeMillis();
zamanı saklamak için kullanılır onBackPressed()
;
private static final int TIME_INTERVAL = 2000; // # milliseconds, desired time passed between two back presses.
private long mBackPressed;
@Override
public void onBackPressed()
{
if (mBackPressed + TIME_INTERVAL > System.currentTimeMillis())
{
super.onBackPressed();
return;
}
else { Toast.makeText(getBaseContext(), "Tap back button in order to exit", Toast.LENGTH_SHORT).show(); }
mBackPressed = System.currentTimeMillis();
}
Kabul edilen cevap eleştirisine geri dönelim ; Bir kullanarak flag
o sonuncu basıldığında ise belirtmek için TIME_INTERVAL
(2000 say) milisaniye ve set - reset yoluyladır Handler
bireyin postDelayed()
yöntem zihnimde gelen ilk şeydi. Ancak, postDelayed()
etkinlik kapatıldığında eylem iptal edilerekRunnable
.
Kaldırmak için anonimRunnable
ilan edilmemeli ve aynı zamanda üye olarak ilan edilmemelidir . Sonra yöntemiHandler
removeCallbacks()
Handler
uygun şekilde çağrılabilir.
Aşağıdaki örnek gösterimdir;
private boolean doubleBackToExitPressedOnce;
private Handler mHandler = new Handler();
private final Runnable mRunnable = new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
};
@Override
protected void onDestroy()
{
super.onDestroy();
if (mHandler != null) { mHandler.removeCallbacks(mRunnable); }
}
@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();
mHandler.postDelayed(mRunnable, 2000);
}
@NSouth'a katkılarından dolayı teşekkür ederiz; Tost mesajının uygulama kapatıldıktan sonra bile görünmesini önlemek Toast
için üye olarak söylenebilir - diyelim ki mExitToast
- çağrıdan mExitToast.cancel();
hemen önce iptal edilebilir super.onBackPressed();
.