117 votes

La propriété setCancelable de DialogFragment ne fonctionne pas

Je travaille dans une application Android et j'utilise un DialogFragment pour afficher un dialogue et je veux que ce DialogFragment ne soit pas annulable. J'ai rendu la propriété de dialogue annulable à false, mais cela n’a pas d’incidence.

Veuillez regarder dans mon code et me suggérer une solution.

 public class DialogTest extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        return super.onCreateDialog(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.dialog_test, container, true);
        getDialog().requestWindowFeature(STYLE_NO_TITLE);
        getDialog().setCancelable(false);

        return view;
    }
 }
 

274voto

blackbelt Points 45840
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
           Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.dialog_test, container, true);
        getDialog().requestWindowFeature(STYLE_NO_TITLE);
        getDialog().setCancelable(false);

        return view;
    }
 

au lieu de getDialog().setCancelable(false); vous devez utiliser directement setCancelable(false);

61voto

Usman Kurd Points 3556

Utilisez l'extrait suivant

 void showDialog() {
DialogFragment newFragment = MyAlertDialogFragment.newInstance(
        R.string..alert_dialog_two_buttons_title);
newFragment.setCancelable(false);
newFragment.show(getFragmentManager(), "dialog");
 

}

et si vous souhaitez désactiver la boîte de dialogue tactile externe, utilisez la ligne de code suivante

 DialogFragment.getDialog().setCanceledOnTouchOutside(true);
 

32voto

Xenione Points 613

Dans le cas où vous utilisez alerte générateur (et probablement dans tous les cas vous envelopper de dialogue à l'intérieur d'un fragmentDialog) pour aider à construire votre boîte de dialogue, s'il vous plaît ne pas utiliser getDialog().setCancelable(false) ou la boîte de Dialogue.setCancelable(faux) parce qu'il ne va pas au travail. Utilisation setCancelable(faux) comme indiqué dans le code ci-dessous comme il est mentionné dans oficial android documentation:

"public void setCancelable (boolean cancelable) Ajout de l'API de niveau 11 Contrôler si la boîte de Dialogue affichée est annulable. Utiliser ce lieu de composant directement le numéro de la boîte de Dialogue.setCancelable(boolean), parce que DialogFragment doit changer son comportement sur cette base."

ref:http://developer.android.com/reference/android/app/DialogFragment.html#setCancelable(booléen)

public class MyDialogFragment extends DialogFragment {



@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.dialog_layout, null, false);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
            .setTitle("in case you want use a title").setView(view);

    AlertDialog alert=builder.create();
   // alert.setCancelable(false); <-- dont' use that instead use bellow aproach
    setCancelable(false); <-  press back button not cancel dialog, this one works fine
    alert.setCanceledOnTouchOutside(false); <- to cancel outside touch
    return alert;

}

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