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
의 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();
.