Попытка реализовать подтверждение выхода в моем приложении для Android - PullRequest
3 голосов
/ 08 декабря 2010

Я уже обнаружил, что вы не можете переопределить кнопку Домой на телефоне Android. Он выходит из приложения, ВСЕГДА выходит из приложения и не беспокоится о каком-либо подтверждении Namby-Pamby. Полагаю, я понимаю рассуждения Google - но я думаю, что это немного недальновидно ...

В любом случае (до того, как я узнал о кнопке «Домой»), я настроил свое приложение, чтобы пользователь мог выйти из приложения через меню параметров - с помощью onCreateOptionsMenu () и файла XML я настроил простое всплывающее окно меню, которое отображается при нажатии кнопки меню. Один из вариантов - выход, и он работает нормально.

Однако мне пришло в голову, что было бы неплохо добавить диалог подтверждения в процесс выхода (даже если его также можно считать излишним). Итак, я создал AlertDialog с заголовком «Хотите выйти?» Кнопки Да и Нет ...

Прослушиватели щелчков для кнопок просты и просто устанавливают exitConfirm (логическое значение) true или false. Код, который обрабатывает пункт меню «Выход», очищается после моего приложения и выполняет finish () или нет, в зависимости от состояния exitConfirm ...

К сожалению, это полностью не работает ... Весь код в onOptionsItemSelected () для случая выхода выполняется, а затем отображается диалог !! Полагаю, я должен был это предвидеть. И я полагаю, что если я продолжу настаивать на этом, я придумаю способ сделать это, но я подумал, что я буду просить сообщество о предложениях - так, есть ли у кого-нибудь предложение о способе плавного выхода из приложения Android в способ, который включает в себя этап получения подтверждения от пользователя ??

Спасибо, R.

Ответы [ 3 ]

6 голосов
/ 08 декабря 2010

Прежде всего - это ужасная практика.Запрос подтверждения может быть хорошим вариантом для настольного приложения, но вы пишете мобильное приложение.Это другое.На самом деле, мне нужно написать это жирным шрифтом:

Вы не пишете приложение для рабочего стола.Нет варианта выхода.Определенно нет подтверждения выхода. Здесь - отличный вопрос.

Для вашего вопроса: используйте setPositiveButton и setNegativeButton для обработки кнопок.

4 голосов
/ 08 декабря 2010

Краткий ответ:

Вы должны прочитать: Когда включать кнопку выхода в приложениях Android .

Длинный ответ: Вы можете попробовать что-то вроде этого:

protected Dialog onCreateDialog(int id) {
        Dialog dialog = null;

        switch (id) {
        case MENU_QUIT:
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(getString(R.string.main_screen_quit_text))
                    .setCancelable(false)
                    .setPositiveButton(
                            getString(R.string.main_screen_quit_yes),
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {

                                    moveTaskToBack(true);
                                }
                            })
                    .setNegativeButton(getString(R.string.main_screen_quit_no),
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    dialog.cancel();
                                }
                            });
            AlertDialog alert = builder.create();
            return alert;
        default:
            dialog = null;
        }
        return dialog;
    }
2 голосов
/ 31 января 2011

Видимо, обычно считается нехорошо иметь кнопку выхода (или пункт меню, или что-то еще) в вашем приложении для Android.Очевидно, это потому, что ваше приложение на самом деле не закрывается.Это только сведено к минимуму, и, по-видимому, ОС в конечном итоге позаботится об этом.

Однако, если то, что вы делаете, требует некоторого уровня очистки, когда вы закончите, этовот что я знаю об этом:

  1. Обратите особое внимание на различные «Методы жизненного цикла» Android, особенно на то, что их запускает.Методы жизненного цикла включают onCreate (), onStart (), onResume (), onPause () и onStop ().Существует также onDestroy () - дополнение к onCreate () - но я в настоящее время не использую его.

  2. Эти методы вызываются в ответ на различные события (например, нажатие Home).кнопка), но что было важно в моем случае, так это то, что минимизация вызовов приложения onPause () и максимизация вызовов вызывает onResume ().Следовательно, мне нужно было вызывать мои методы установки и разрыва из этих мест, а НЕ, например, из onCreate () и onDestroy ().

  3. Есть функция с именем finish(), который я использовал для всего моего кода.Теперь только в методе, который вызывается для потери связи с моим внешним устройством.Я полагаю, что результаты вызова finish () - это в точности результаты нажатия кнопки Home, поэтому это просто способ «нажать» кнопку Home в программном обеспечении.

ДлинныйВывод ко всему этому - кнопка «Домой» абсолютно БУДЕТ скрывать ваше приложение от взгляда пользователя.Вы не можете перехватить нажатие этой клавиши - независимо от того, насколько сильно вы хотите добавить что-то вроде: «Вы уверены?»функциональность.Тем не менее, приложение было свернуто, а не закрыто, и это может быть как хорошим, так и плохим.Если вы написали свой код запуска и завершения работы должным образом (и добавили его в надлежащие методы жизненного цикла), вы не взорвете все, и ваш пользователь сможет легко вернуться в ваше приложение, как только он изучитчтобы долго нажимать кнопку «Домой», чтобы увидеть список свернутых приложений.

Если повезет, я думаю, они обвинят свое разочарование в Google, а не в вас ...

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