it-swarm.com.de

Die Eigenschaft "DialogFragment setCancelable" funktioniert nicht

Ich arbeite in einer Android) -Anwendung und verwende ein DialogFragment, um ein Dialogfeld anzuzeigen. Ich möchte, dass dieses DialogFragment nicht abgebrochen werden kann. Ich habe die Eigenschaft "dialog cancelable" auf "false" gesetzt, aber sie hat weiterhin keine Auswirkungen .

Bitte schauen Sie in meinen Code und schlagen Sie mir eine Lösung vor.

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

anstelle von getDialog().setCancelable(false); musst du direkt setCancelable(false); verwenden

die aktualisierte Antwort wird also so aussehen

@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

Verwenden Sie das folgende Snippet

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

und wenn Sie das Dialogfeld für die Außenseitenberührung deaktivieren möchten, verwenden Sie die folgende Codezeile

DialogFragment.getDialog().setCanceledOnTouchOutside(true);
48
Usman Kurd

Wenn Sie den Alert Builder verwenden (und wahrscheinlich in jedem Fall den Dialog in ein DialogFragment einschließen), um den Dialog zu erstellen, verwenden Sie bitte nicht getDialog (). SetCancelable (false) oder Dialog.setCancelable (false) weil es nicht funktionieren wird. Verwende setCancelable (false) wie im Code unten gezeigt, wie in der offiziellen Android Dokumentation erwähnt:

public void setCancelable (boolean cancelable)

Hinzugefügt in API Level 11 Kontrollieren Sie, ob der angezeigte Dialog abgebrochen werden kann. Verwenden Sie dies, anstatt Dialog.setCancelable (boolean) direkt aufzurufen, da DialogFragment sein Verhalten basierend darauf ändern muss. "

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