Я хочу, чтобы приложение отображало предупреждающее сообщение, когда пользователь нажимает кнопку «Назад», и если пользователь выбирает «Да», оно вернется. И я нахожусь во фрагменте навигационного графика.
Я много раз искал в переполнении стека и пробовал:
@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 (кнопка «Назад» для мобильных устройств) во фрагменте навигационных графиков.
Вы хотите получить кнопку возврата из фрагмента. ?
Мне нужно onBackButtonClickListener- во фрагменте графа навигации
Добавьте эту строку в кнопку 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())
Студия Android не разрешает .onBackPressed() в расширенном фрагменте
onbackpress предназначен только для действия не во фрагменте, используйте onbackpress для этого фрагмента в их родительском действии.
о печально слышать это. Спасибо за помощь
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 обновить свою версию
Обратите внимание, что указанный выше префикс «requireActivity()» необходим, когда OnBackPressedDispatcher настраивается из фрагмента, но префикс не требуется при настройке из действия.
Добавьте логическую переменную isBack = false, и если она говорит «да», сделайте ее истинной и проверьте условие, что isBack является ложным или истинным, и если это правда, добавьте super.pressBack(), иначе покажите диалоговое окно изменения, оберните диалоговое окно изменения в другую функцию