Descartar DialogFragment mediante programación

¿Cómo se puede descartar programaticamente un DialogFragment? Actualmente estoy creando diálogos por:

void showDialogWithId(int id){ FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); if (id == SEARCHING_DIALOG){ // Create and show the dialog. DialogFragment newFragment = MyDialogFragment.newInstance(SEARCHING_DIALOG,"TEST"); newFragment.show(ft, "dialog"); } if (id == CONNECTING_DIALOG){ // Create and show the dialog. DialogFragment newFragment = MyDialogFragment.newInstance(CONNECTING_DIALOG,"TEST"); newFragment.show(ft, "dialog"); } if (id == CONNECTIVITY_DIALOG){ // Create and show the dialog. DialogFragment newFragment = MyDialogFragment.newInstance(CONNECTIVITY_DIALOG); newFragment.show(ft, "dialog"); } } 

Y espero despedirlos por:

 public void dismissDialog(){ getFragmentManager().popBackStack(); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); } 

Sin embargo, los diálogos no se están descartando …

Intenta usar

 getDialog().dismiss(); 

Dentro de los DialogFragments. Por ejemplo, puede encontrar el DialogFragment por su etiqueta, como lo hace, y luego llamar a algún método en él que llama a este código. Por lo general no iniciar un descarte de un DialogFragment de la actividad, mis botones de diálogo hacer eso para mí. Pero creo que esto también debería funcionar. No estoy seguro de cómo esto afectaría el fragmento backstack tho.

Para agregar la respuesta anterior y los comentarios asociados, para eliminar el cuadro de diálogo que tiene que hacer:

 public void dismissDialog(){ Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); if (prev != null) { DialogFragment df = (DialogFragment) prev; df.dismiss(); } } 

En mi caso de uso, hago lo siguiente:

En una actividad (o en cualquier otro lugar) de la que está mostrando diálogo defina una variable miembro:

 private DialogFragment mMyDialog; 

A continuación, asignar mMyDialog antes de mostrarlo:

 mMyDialog = MyDialog.newInstance(...whatever vars...); // MyDialog is extended from DialogFragment mMyDialog.show(); 

Y, finalmente, en el lugar donde necesita descartar el diálogo decir:

 if (mMyDialog != null) { mMyDialog.dismiss(); mMyDialog = null; } 

MyProgressDialog es una clase que extiende DialogFragment

// Cómo mostrar

  MyProgressDialog pd = new MyProgressDialog(); Bundle b = new Bundle(); b.putString(ProgressDialog.PROGRESS_TITLE, "Loading data"); b.putString(ProgressDialog.PROGRESS_MESSAGE, "Getting your data from server"); b.putBoolean(ProgressDialog.PROGRESS_IS_CALLBACK_NEEDED, false); pd.setArguments(b); pd.show(getActivity().getSupportFragmentManager(), ProgressDialog.class.getSimpleName()); 

// Cómo despedir

  if (pd != null && pd.isAdded()) { pd.dismiss(); pd = null; } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.