Sudheesh B Nair có một câu trả lời hay (và được chấp nhận) cho câu hỏi, mà tôi nghĩ nên có một cách thay thế tốt hơn như;
Có gì sai khi đo thời gian trôi qua và kiểm tra xem TIME_INTERVAL
miliseconds (giả sử 2000) đã trôi qua kể từ lần nhấn trở lại cuối cùng. Mã mẫu sau đây sử dụng System.currentTimeMillis();
để lưu trữ thời gian onBackPressed()
được gọi;
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();
}
Trở lại chấp nhận trả lời phê bình ; Sử dụng một flag
để chỉ ra nếu nó được nhấn ở cuối cùng TIME_INTERVAL
(nói 2000) mili giây và thiết lập - reset là thông qua Handler
's postDelayed()
phương pháp là điều đầu tiên đến trong tâm trí tôi. Nhưng postDelayed()
hành động nên được hủy bỏ khi hoạt động đóng cửa, loại bỏ Runnable
.
Để xóa Runnable
, nó không được khai báo ẩn danh và được khai báo là thành viên cùng với Handler
aswell. Sau đó, removeCallbacks()
phương pháp củaHandler
có thể được gọi là thích hợp.
Mẫu sau đây là trình diễn;
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);
}
Cảm ơn @NSouth đã đóng góp; Để ngăn tin nhắn bánh mì nướng xuất hiện ngay cả sau khi ứng dụng bị đóng, Toast
có thể được khai báo là thành viên - nói mExitToast
- và có thể bị hủy qua mExitToast.cancel();
ngay trước khi super.onBackPressed();
gọi.