41 votes

Ignorer DialogFragment par programme

Comment rejeter par programme un DialogFragment? Je crée actuellement des dialogues par:

 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");
    }

}
 

Et je compte les licencier par:

 public void dismissDialog(){

    getFragmentManager().popBackStack();

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


}
 

Cependant, les dialogues ne sont pas fermés ...

69voto

Zsombor Erdődy-Nagy Points 8376

Essayez d'utiliser

 getDialog().dismiss();
 

À l'intérieur des DialogFragments. Ainsi, par exemple, vous pouvez trouver le DialogFragment par sa balise, comme vous le faites, puis appeler une méthode qui appelle ce code. Je n'initie généralement pas le rejet d'un DialogFragment de l'activité, mes boutons de dialogue le font pour moi. Mais je pense que cela devrait également fonctionner. Je ne sais pas comment cela affecterait le fragment backstack tho.

23voto

ol_v_er Points 8532

Pour agréger la réponse précédente et les commentaires associés, pour supprimer la boîte de dialogue, vous devez faire:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X