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

  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.

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

  • Fragmento getView () devuelve null en una devolución de llamada OnClickListener
  • ¿Cuál es la diferencia entre un Fragmento sin Cabeza y un Servicio en Android?
  • Método de llamada desde Fragmento en ViewPager
  • Mezcla de TabListener, ActionBarSherlock Fragment y ListFragment, PageAdapter? Un desastre
  • onActivityResult no llama y Fragment se cierra del selector de imágenes Android
  • 2 ViewPager no se desplaza en Android 2.3
  • Determinar el cambio de fragmentos mientras se prueba el espresso
  • ¿Cómo puedo "findViewById" con fragmentos?
  • IsValidFragment Android API 19
  • Cualquier ejemplo que muestre cómo iniciar sesión con Facebook SDK 4.0 en Android, ya sea utilizando el botón propio o el botón de Facebook?
  • Android: pasando objetos entre fragmentos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.