from - fullscreen dialogfragment android
Descartar DialogFragment mediante programaciĆ³n (4)
En mi caso de uso, hago lo siguiente:
En una actividad (o en cualquier otro lugar) de usted está mostrando el diálogo definir una variable miembro:
private DialogFragment mMyDialog;
Luego asigne mMyDialog antes de mostrarlo:
mMyDialog = MyDialog.newInstance(...whatever vars...); // MyDialog is extended from DialogFragment
mMyDialog.show();
Y finalmente, en el lugar donde necesitas descartar el diálogo di:
if (mMyDialog != null) {
mMyDialog.dismiss();
mMyDialog = null;
}
¿Cómo descarta programáticamente 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 están siendo descartados ...
Intenta usar
getDialog().dismiss();
Dentro de DialogFragments. Entonces, por ejemplo, puede encontrar el DialogFragment por su etiqueta, como lo hace, y luego llamar a algún método que llame a este código. Por lo general, no empiezo a descartar un DialogFragment de la Actividad, mis botones de diálogo lo hacen por mí. Pero creo que esto también debería funcionar. No estoy seguro de cómo esto afectaría el fragmento de backstack aunque.
Para agregar la respuesta anterior y los comentarios asociados, para eliminar el cuadro de diálogo debe hacer lo siguiente:
public void dismissDialog(){
Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
DialogFragment df = (DialogFragment) prev;
df.dismiss();
}
}
MyProgressDialog
es una clase que amplía 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 descartar
if (pd != null && pd.isAdded()) {
pd.dismiss();
pd = null;
}