Как отключить OnBackPressedCallback?
Я вызываю DialogFragment, и мне нужно чтобы пользователь не мог по нажатию на OnBackPressedCallback выйти из этого DialogFragment, проще говоря отключить возможность OnBackPressedCallback?
Пробовал решить это следующим образом, но не сработало
callback = new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed()
{
callback.setEnabled(false);
}
};
Полный код данного DialogFragment
public class DialogLogout extends DialogFragment {
OnBackPressedCallback callback;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
callback = new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed()
{
callback.setEnabled(false);
}
};
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
View view = inflater.inflate(R.layout.dialog_logout, container, false);
TextView exit_yes = view.findViewById(R.id.exit_yes);
TextView exit_no = view.findViewById(R.id.exit_no);
exit_yes.setOnClickListener(v ->
finish());
exit_no.setOnClickListener(v -> Objects.requireNonNull(getDialog()).dismiss());
return view;
}
private void finish() {
if (getActivity() != null) {
getActivity().finish();
}
}
}
Ответы (1 шт):
Автор решения: Andrew
→ Ссылка
Есть несколько вариантов, например можно запретить сворачивание диалога (доки):
DialogFragment mDialog= new MyDialogFragment();
mDialog.setCancelable(false);
mDialog.show(getFragmentManager(), "dialog");
так же можно в onResume данного диалога положить слушатель нажатия на кнопку:
getDialog().setOnKeyListener(new OnKeyListener()
{
@Override
public boolean onKey(android.content.DialogInterface dialog, int keyCode,android.view.KeyEvent event) {
if ((keyCode == android.view.KeyEvent.KEYCODE_BACK))
{
//Hide your keyboard here!!!
return true; // pretend we've processed it
}
else
return false; // pass on to be processed as normal
}
});
При создании диалога можно добавить отключение сворачивания в onCreateView:
setCancelable(false);