У меня есть действие, которое содержит несколько пользователей доступные для редактирования объекты (поле 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();
}
Я на правильном пути или являюсь там другим способом выполнить то, что я пытаюсь сделать здесь? Любая справка была бы большой!
Вы не совсем на правильном пути; то, что вам следует делать, это переопределить 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()
и т.д.