Обратный вызов кнопки на спине не запускается после развлечения фрагмента (вращение)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Обратный вызов кнопки на спине не запускается после развлечения фрагмента (вращение)

Сообщение Anonymous »

контекст < /h1>
Я пытаюсь перехватить поведение кнопки по умолчанию обратной кнопки, чтобы иметь возможность добавлять подтверждающие сообщения («Вы уверены, что хотите выйти?

Код: Выделить всё

Activity
и его фрагмент ).
Я устанавливаю обратный вызов на действие . Когда в заднем стеке нет ничего, и приложение закроется, появляется диалоговое окно, чтобы подтвердить, что вы хотите выйти в систему. Этот обратный вызов гарантируется, что если в профиле есть непреднамеренные изменения в профиле, который вы их применяете или отмените. Модель .
[*] Образ вызовов деятельности в методе Oncreate .
Обращение к фрагменту находится в методе onviewcreated . ProfileFragment , внесите изменение (так что диалог фактически показывается), поверните устройство (вызывая уничтожение и воссоздание) , а затем нажмите назад, он просто выполняет поведение по умолчанию обратного нажатого: оно восходит к предыдущему фрагменту (то есть пользователь дома). Как будто обратный вызов не добавляется снова. Это также фактически нарушает кнопку UP на панели инструментов ; Это больше ничего не делает. Приятно отметить, что поведение кнопки UP еще вообще не модифицировано. Иногда, когда я протягиваю нажатие назад и вращаю устройство, приложение сбои, говоря, что оно не может найти дополнительного. Скорее всего, это связано с тем, что у меня не было этой проблемы, прежде чем я добавил обратные вызовы. SavedInStanceState ? Class = "Lang-Java PrettyPrint-Override">

Код: Выделить всё

private void showLogoutConfirmationDialog() {
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("Logout")
.setMessage("Going back will log you out of the app. Are you sure you want to continue?")
.setPositiveButton("Logout", (dialogInterface, which) -> {
dialogInterface.dismiss();
UserLaunchNavigationHelper.logout(this);
})
.setNegativeButton("Cancel", (dialogInterface, which) -> dialogInterface.dismiss())
.create();

dialog.show();
}
in oncreate :

Код: Выделить всё

getOnBackPressedDispatcher().addCallback(this,
new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
if (!navController.popBackStack()) {
showLogoutConfirmationDialog();
}

}
});
внутри ProfileFragment :

Код: Выделить всё

private void attemptExit(Runnable proceedAction) {
if (Boolean.TRUE.equals(profileViewModel.hasAnyChanges.getValue())) {
showConfirmDialog(proceedAction);
} else {
proceedAction.run();
}
}

private void showConfirmDialog(Runnable proceedAction) {
new AlertDialog.Builder(requireContext())
.setTitle("Discard changes?")
.setMessage("You have unsaved changes. Do you want to save or discard?")
.setPositiveButton("Save", (d, w) -> {
applyChanges();
proceedAction.run();
})
.setNegativeButton("Discard", (d, w) -> {
profileViewModel.resetChanges();
proceedAction.run();
})
.setNeutralButton("Cancel", null)
.show();
}
in onviewcreated :
requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(),
new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
attemptExit(() -> {

setEnabled(false);
requireActivity().getOnBackPressedDispatcher().onBackPressed();
setEnabled(true);
});
}
});
< /code>
Что я попробовал < /h1>

Я попытался изменить, где были добавлены обратные вызовы, которые не помог Приложение.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... n-rotation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»