Запрос пользователя при нажатии кнопки Назад - PullRequest
13 голосов
/ 09 июня 2011

Где лучше всего спросить пользователя, хочет ли он выйти из приложения, когда он нажал кнопку «Назад»? Я рассмотрел onPause и onStop, но эти методы запускаются всякий раз, когда приложение отстает от других приложений.

Обновление: Приложение также должно спросить, пытается ли пользователь выйти из приложения с помощью кнопки (в самом приложении), а не клавиши «Назад».

Ответы [ 5 ]

18 голосов
/ 09 июня 2011

Запросите разрешение пользователя на закрытие приложение.

Вы можете сделать это следующим образом;

/**
 * Exit the app if user select yes.
 */
private void doExit() {

    AlertDialog.Builder alertDialog = new AlertDialog.Builder(
            AppDemoActivity.this);

    alertDialog.setPositiveButton("Yes", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    });

    alertDialog.setNegativeButton("No", null);

    alertDialog.setMessage("Do you want to exit?");
    alertDialog.setTitle("AppTitle");
    alertDialog.show();
}

Какое хорошее место, чтобы спросить пользователя, хочет ли он выйти из приложения когда он нажал кнопку "Назад"?

Поскольку вы хотите, чтобы пользователь нажимал, когда он (и) нажимал жёсткую кнопку «назад», как предлагают другие, вы можете переопределить метод onBackPressed() и вызывать указанный выше метод оттуда;

@Override
public void onBackPressed() {

    doExit();
}

Как предлагает @ Martyn , вы можете использовать onKeyDown для достижения того же самого;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if(keyCode == KeyEvent.KEYCODE_BACK) {
        doExit();
    }

    return super.onKeyDown(keyCode, event);
}

Приложение также должно спросить, является ли пользователь пытаясь выйти из приложения с помощью кнопки (в самом приложении), а не Back hard ключ.

Для этого вызовите doExit() с помощью кнопки onClick;

Button exitButton = (Button)findViewById(R.id.exitButton);
exitButton.setOnClickListener(new android.view.View.OnClickListener() {

    @Override
    public void onClick(View v) {
        doExit();
    }
});


Дополнительная информация:

6 голосов
/ 09 июня 2011

посмотрите по этой ссылке ..

Вы не должны выходить из приложения.

Выходит ли из приложения недовольное?

2 голосов
/ 09 июня 2011

Если это только когда пользователь нажимает назад (не дома или что-то еще), используйте onBackPressed .

Док говорит:

Вызывается при обнаружении активности пользователь нажимает клавишу возврата. реализация по умолчанию просто заканчивается текущая активность, но вы можете переопределите это, чтобы делать что хотите.

Так что, если вы ловите спину и ничего не делаете, действие не прекращается. Если вы хотите выйти, используйте finish()

2 голосов
/ 09 июня 2011

Лучшее место в onBackPressed.единственное, что вам нужно иметь в виду, это то, что приложение ведет себя «нормально» - то есть, когда пользователь нажимает кнопку назад, он должен перейти к предыдущему экрану - если он нажимает обратно на главном экране, тогда хорошо спросить, имели ли они в видувыйти из приложения.

0 голосов
/ 07 декабря 2018

Это довольно старый вопрос, но он высоко оценивается в Google, поэтому я подумал, что ему может понадобиться Обновление :

@Override
public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Do you want to exit the app?");

    // if user presses "Exit", then he is allowed to exit from application
    builder.setPositiveButton("Exit", (dialog, which) -> finish());

    // if user selects "Stay", just cancel this dialog and continue with app
    builder.setNegativeButton("Stay", (dialog, which) -> dialog.cancel());

    builder.create().show();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...