Sudheesh B Nairมีคำตอบที่ดี (และยอมรับ) ในคำถามซึ่งฉันคิดว่าควรมีทางเลือกที่ดีกว่าเช่น;
มีอะไรผิดปกติกับการวัดเวลาที่ผ่านไปและการตรวจสอบว่ามีTIME_INTERVAL
หน่วยเป็นมิลลิวินาที (บอกว่า 2000) ผ่านไปนับตั้งแต่การกดครั้งสุดท้าย โค้ดตัวอย่างต่อไปนี้ใช้System.currentTimeMillis();
เพื่อเก็บเวลาที่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();
}
กลับไปที่คำตอบที่ได้รับการยอมรับคำวิจารณ์ ; ใช้flag
เพื่อแสดงให้เห็นว่ามันถูกกดในช่วงTIME_INTERVAL
(พูด 2000) มิลลิวินาทีและชุด - การตั้งค่าผ่านทางHandler
's postDelayed()
วิธีเป็นสิ่งแรกที่จะมาในใจของฉัน แต่การpostDelayed()
ดำเนินการควรถูกยกเลิกเมื่อกิจกรรมปิดทำการลบRunnable
การดำเนินการควรจะยกเลิกเมื่อมีกิจกรรมที่กำลังจะปิดลบ
เพื่อที่จะลบRunnable
มันจะต้องไม่ถูกเปิดเผยโดยไม่ระบุตัวตนและจะถูกประกาศให้เป็นสมาชิกพร้อมด้วยHandler
เช่นกัน removeCallbacks()
วิธีการนั้นHandler
สามารถเรียกได้อย่างเหมาะสม
ตัวอย่างต่อไปนี้เป็นการสาธิต;
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 ที่ให้ความช่วยเหลือ เพื่อป้องกันไม่ให้ข้อความของขนมปังปิ้งปรากฏขึ้นแม้ว่าจะปิดแอปพลิเคชันแล้วToast
คุณสามารถประกาศเป็นสมาชิก - พูดmExitToast
- และสามารถยกเลิกได้mExitToast.cancel();
ก่อนการsuper.onBackPressed();
โทร