web-dev-qa-db-fra.com

La propriété setCancelable de DialogFragment ne fonctionne pas

Je travaille dans une application Android) et j'utilise un DialogFragment pour afficher une boîte de dialogue. Je souhaite que cette fonction ne soit pas annulable. .

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;
    }
 }
89
Arun
@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);

donc la réponse mise à jour sera comme ça

@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);
    setCancelable(false);

    return view;
}
213
Blackbelt

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);
48
Usman Kurd

Si vous utilisez le générateur d'alertes (et que vous encapsulez probablement la boîte de dialogue dans un dialogue DialogFragment) pour vous aider à construire votre boîte de dialogue, veuillez ne pas utiliser getDialog (). SetCancelable (false) ou Dialog.setCancelable (false) car cela ne fonctionnera pas. Utilisez setCancelable (false) comme indiqué dans le code ci-dessous, comme il est mentionné dans la documentation officielle Android:

public void setCancelable (boolean cancelable)

Ajouté dans l'API niveau 11 Contrôle si le dialogue affiché est annulable. Utilisez ceci au lieu d'appeler directement Dialog.setCancelable (boolean), car DialogFragment doit changer son comportement en fonction de cela. "

ref: http://developer.Android.com/reference/Android/app/DialogFragment.html#setCancelable (boolean)

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 approach
        setCancelable(false); <-  press back button not cancel dialog, this one works fine
        alert.setCanceledOnTouchOutside(false); <- to cancel outside touch

        return alert;
}
28
Xenione