Sudheesh B Nair memiliki jawaban yang bagus (dan dapat diterima) pada pertanyaan, yang menurut saya harus memiliki alternatif yang lebih baik seperti;
Apa yang salah dengan mengukur waktu berlalu dan memeriksa apakah TIME_INTERVAL
milidetik (katakanlah 2000) berlalu sejak pers terakhir terakhir. Kode contoh berikut digunakan System.currentTimeMillis();
untuk menyimpan waktu onBackPressed()
disebut;
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();
}
Kembali pada kritik jawaban yang diterima ; Menggunakan flag
untuk menunjukkan jika ditekan di terakhir TIME_INTERVAL
(mengatakan 2000) milidetik dan set - ulang adalah melalui Handler
's postDelayed()
metode adalah hal pertama yang datang dalam pikiran saya. Tetapi postDelayed()
tindakan harus dibatalkan ketika aktivitas ditutup, menghapus Runnable
.
Untuk menghapusnya Runnable
, itu tidak boleh dinyatakan anonim , dan dinyatakan sebagai anggota bersama dengan Handler
aswell. KemudianremoveCallbacks()
metode Handler
dapat disebut dengan tepat.
Contoh berikut adalah demonstrasi;
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);
}
Terima kasih kepada @NSouth karena berkontribusi; Untuk mencegah pesan roti muncul bahkan setelah aplikasi ditutup, Toast
dapat dinyatakan sebagai anggota - katakan mExitToast
- dan dapat dibatalkan via mExitToast.cancel();
sebelum super.onBackPressed();
panggilan.