Android: Предложите пользователю сохранять изменения, когда Кнопка "Назад" будет нажата

У меня есть действие, которое содержит несколько пользователей доступные для редактирования объекты (поле EditText, RatingBar, и т.д.). Я хотел бы предложить пользователю, если спина/кнопка "Домой" нажимается, и изменения были внесены, которые еще не были сохранены. После прочтения документации андроида кажется, что эта часть кода должна войти в onPause метод. Я попытался поместить AlertDialog в onPause однако, диалоговое окно показывают и затем сразу разъединяет, потому что ничто не там для блокирования паузы от завершения.

Это - то, что я придумал до сих пор:

@Override
protected void onPause() {
    super.onPause();

    AlertDialog ad = new AlertDialog.Builder(this).setMessage(
            R.string.rating_exit_message).setTitle(
            R.string.rating_exit_title).setCancelable(false)
            .setPositiveButton(android.R.string.ok,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int whichButton) {
                            // User selects OK, save changes to db
                        }
                    }).setNeutralButton(android.R.string.cancel,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int whichButton) {
                            // User selects Cancel, discard all changes
                        }
                    }).show();
}

Я на правильном пути или являюсь там другим способом выполнить то, что я пытаюсь сделать здесь? Любая справка была бы большой!

34
задан chriskopec 17 March 2010 в 04:06
поделиться

1 ответ

Вы не совсем на правильном пути; то, что вам следует делать, это переопределить onKeyDown() и прослушать нажатие клавиши "назад", затем переопределить поведение по умолчанию:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

Если вы поддерживаете только Android 2. 0 и выше, они добавили onBackPressed(), который можно использовать вместо этого:

@Override
public void onBackPressed() {
    // do something on back.
    return;
}

Этот ответ по сути взят из этого сообщения в блоге. Прочитайте его, если вам нужны длинные нажатия, поддержка совместимости, поддержка виртуальных жестких клавиш или сырые решения вроде onPreIme() и т.д.

95
ответ дан 27 November 2019 в 16:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: