सुदेश बी नायर के सवाल पर एक अच्छा (और स्वीकृत) जवाब है, जो मुझे लगता है कि एक बेहतर विकल्प होना चाहिए जैसे;
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
की 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);
}
योगदान के लिए @ धन्यवाद का धन्यवाद; आवेदन बंद होने के बाद भी दिखने वाले टोस्ट संदेश को रोकने के लिए , Toast
सदस्य के रूप में घोषित किया जा सकता है - कहते हैं mExitToast
- और कॉल mExitToast.cancel();
से पहले के माध्यम से रद्द किया जा सकता है super.onBackPressed();
।