Как показать предупреждающее сообщение при нажатии кнопки «Назад» во фрагментах

Я хочу, чтобы приложение отображало предупреждающее сообщение, когда пользователь нажимает кнопку «Назад», и если пользователь выбирает «Да», оно вернется. И я нахожусь во фрагменте навигационного графика.

Я много раз искал в переполнении стека и пробовал:

@Override
public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    builder.setTitle("Save Or Not");
    builder.setMessage("Do you want to save this? ");
    builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            /*Go back:-I dont know how*/
        }
    });
    builder.setNegativeButton("Discard",null);
    builder.show();
}

Но он показывает ошибку дающего: Метод не переопределяет метод из своего суперкласса

Редактировать: Я хочу установить onBackPressedListener (кнопка «Назад» для мобильных устройств) во фрагменте навигационных графиков.

Добавьте логическую переменную isBack = false, и если она говорит «да», сделайте ее истинной и проверьте условие, что isBack является ложным или истинным, и если это правда, добавьте super.pressBack(), иначе покажите диалоговое окно изменения, оберните диалоговое окно изменения в другую функцию

Jainil Patel 27.05.2019 06:46

Вы хотите получить кнопку возврата из фрагмента. ?

Shohel Rana 27.05.2019 06:57

Мне нужно onBackButtonClickListener- во фрагменте графа навигации

Aradhya Gopal Nepal 27.05.2019 07:16
4
3
1 173
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Добавьте эту строку в кнопку onclicklistener MainActivity.super.onBackPressed(); Замените название своей деятельности вместо MainActivity

 builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
          dialog.dismiss();
          MainActivity.super.onBackPressed();
         //Replace your Activity name insted of MainActivity
        }
    });

Спасибо за помощь, но я нахожусь во фрагменте графа навигации Android, и когда я набираю CreateGame.super.onBackPressed(); он не может решить это (я также сделал getActivity())

Aradhya Gopal Nepal 27.05.2019 07:20

Студия Android не разрешает .onBackPressed() в расширенном фрагменте

Aradhya Gopal Nepal 27.05.2019 07:24

onbackpress предназначен только для действия не во фрагменте, используйте onbackpress для этого фрагмента в их родительском действии.

Nikunj Paradva 27.05.2019 07:25

о печально слышать это. Спасибо за помощь

Aradhya Gopal Nepal 27.05.2019 07:31
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                   //Replace Your Own Action Like Adding Toast etc and Also SuperOnbackprssed or any overriden method
                    dialog.cancel();

                }
            });
Ответ принят как подходящий

При использовании Fragments 1.1.0 (который сейчас находится в альфа-версии) вы можете следовать Предоставлять пользовательскую документацию по обратной навигации, который показывает, как зарегистрировать OnBackPressedCallback, который позволяет вам регистрироваться для onBackPressed() обратных вызовов из Фрагмента:

public class MyFragment extends Fragment {

  @Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // This callback will only be called when MyFragment is at least Started.
    OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
        @Override
        public void handleOnBackPressed() {
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

            builder.setTitle("Save Or Not");
            builder.setMessage("Do you want to save this? ");
            builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                // Save your content
                save();
                // Then pop
                NavHostFragment.findNavController(MyFragment.this).popBackStack();
            }
            builder.setNegativeButton("Discard",null);
            builder.show();
        });
        }
    });
    requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
  }
}

У меня версия фрагмента версии 1.0.0-beta02 в Gradel. Может ли изменить его с Gradel на 1.1.0 обновить свою версию

Aradhya Gopal Nepal 27.05.2019 09:33

Обратите внимание, что указанный выше префикс «requireActivity()» необходим, когда OnBackPressedDispatcher настраивается из фрагмента, но префикс не требуется при настройке из действия.

AJW 11.09.2019 03:58

Другие вопросы по теме