Как я могу настроить кнопку "Назад" для нажатия дважды до выхода приложения? Я хочу вызвать
@Override
public void onBackPressed() {
//custom actions
//display toast "press again to quit app"
super.onBackPressed();
}
Попробуй это:
private boolean doubleBackToExitPressedOnce = false;
@Override
protected void onResume() {
super.onResume();
// .... other stuff in my onResume ....
this.doubleBackToExitPressedOnce = false;
}
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Press twice to exit", Toast.LENGTH_SHORT).show();
}
Этот фрагмент обрабатывает также состояние сброса, когда активность возобновляется
Я вижу, что этот вопрос немного устарел, но, хотя это может помочь некоторым людям искать альтернативу уже предоставленным ответам.
Вот как я обращаюсь с моими приложениями. Если у кого-то есть лучший - или предлагаемый Google - метод выполнения этого, я хотел бы знать.
Изменить - Забыл упомянуть об этом для Android 2.0 и выше. Для предыдущих версий переопределить onKeyDown(int keyCode, KeyEvent event)
и проверить keyCode == KeyEvent.KEYCODE_BACK
. Вот хорошая ссылка, чтобы проверить.
private boolean mIsBackEligible = false;
@Override
public void onBackPressed() {
if (mIsBackEligible) {
super.onBackPressed();
} else {
mIsBackEligible = true;
new Runnable() {
// Spin up new runnable to reset the mIsBackEnabled var after 3 seconds
@Override
public void run() {
CountDownTimer cdt = new CountDownTimer(3000, 3000) {
@Override
public void onTick(long millisUntilFinished) {
// I don't want to do anything onTick
}
@Override
public void onFinish() {
mIsBackEligible = false;
}
}.start();
}
}.run(); // End Runnable()
Toast.makeText(this.getApplicationContext(),
"Press back once more to exit", Toast.LENGTH_SHORT).show();
}
}
Вы можете делать то, что вы запрашиваете, с глобальным целым числом и просто считать его, если> 2, выйти.
Но вы можете принять более эффективный подход (ИМО), когда вы спрашиваете пользователя, хотят ли они отказаться или нет:
private void questionQuit(){
final CharSequence[] items = {"Yes, quit now", "No, cancel and go back"};
builder = new AlertDialog.Builder(mContext);
builder.setCancelable(false);
builder.setTitle("Are you sure you want to quit?");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
switch(item){
case 0:
quit();
break;
case 1:
default:
break;
}
}
}).show();
AlertDialog alert = builder.create();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK :
int i = 0 ;
if(i == 1 )
{
finish();
}
i++;
return true;
}
}
return super.onKeyDown(keyCode, event);
}