DialogFragment y botón Atrás
¿Hay alguna posibilidad de interceptar el botón de la tecla en DialogFragment
? Lo siento por la pregunta ingenua .. el onBackPressed
de mi FragmentActivity
nunca se llama.
gracias por adelantado
- Cómo obtener todos los fragmentos sub / inner / anidados de un fragmento?
- Detectar cuando el fragmento se hace visible
- ¿Cómo llamo a un PreferenceFragment específico de una PreferenceActivity?
- IllegalArgumentException: Ninguna vista encontrada para id para el fragmento al cambiar rápidamente Tabs de ActionBar
- Excepción enviando evento de entrada, al llamar a startActivity
if (imageFile.exists()) { ShowPicDialog newFragment = ShowPicDialog.newInstance(); FragmentTransaction ft = manager.beginTransaction(); Fragment prev = manager.findFragmentByTag("picDialog"); if (prev != null) { ft.remove(prev); } ft.addToBackStack("picDialog"); newFragment.getArguments().putString("path", imageFile.getAbsolutePath()); newFragment.show(ft, "picDialog"); }
Lo siento agregé el recorte de código que utilizo para mostrar el diálogo.
- Pasar lista de objetos complejos de actividad a fragmento
- Android: Administrador de fragmentos se convierte en nulo
- Administrar la barra de herramientas y el botón de retroceso de fragmento a fragmento en android
- Pasar datos entre fragmentos
- Añadir vista a un fragmento dinámicamente en Android?
- ¿Es posible deshabilitar el acceso al diseño del fragmento (vistas) de la actividad de los padres?
- Fragmentos, AsyncTask y Oyentes
- ConstraintLayout del modo de entrada suave de la ventana
Es difícil decir con certeza cuál es el problema, ya que no ha publicado ningún código. Pero mi primera conjetura es que usted no ha agregado el DialogFragment a la pila trasera llamando el método addToBackStack
del FragmentTransaction
que usted está utilizando para agregar su fragmento a la actividad.
Hay ejemplos en las páginas de documentación de Android que dan ejemplos de un buen patrón para usar un DialogFragment en tu actividad .
Puesto que está mostrando un cuadro de diálogo, el cuadro de diálogo creado recibirá los eventos clave, no la actividad principal. Por lo tanto, establezca un Dialog.OnKeyListener
al crear el fragmento del setCancelable(false)
diálogo y llame a setCancelable(false)
en el setCancelable(false)
Dialog
para evitar que la tecla de retroceso la descarte. A continuación, puede manejar la tecla de retroceso en el método onkey
su onkey
.
Mejor manera de manejar DialogFragment con el botón Atrás:
@Override public Dialog onCreateDialog(Bundle savedInstanceState) { return new Dialog(getActivity(), getTheme()){ @Override public void onBackPressed() { // On backpress, do your stuff here. } }; }
La respuesta de Rahul Pundhir funciona muy bien si no está usando el patrón del constructor. Si está utilizando el patrón Builder en su diálogo, puede hacerlo en su lugar:
@Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog alertDialog = new AlertDialog.Builder(getContext()) .setTitle(...) .setPositiveButton(...) .setNegativeButton(...) .setMessage(...) .create(); alertDialog.setOnKeyListener((dialog, keyCode, event) -> { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { // TODO do the "back pressed" work here return true; } return false; }); return alertDialog; }
Esto funciona imitando cómo el sistema llama a onBackPressed()
en primer lugar (ignorando el seguimiento y escucha de ACTION_UP). Ver la fuente en el cuadro de diálogo
- Cómo establecer el comportamiento de comprobación compartida en todos los grupos en NavigationView?
- Cómo agregar cabeceras a interceptor de solicitud OkHttp?