115

私は Android アプリケーションで作業しており、DialogFragment を使用してダイアログを表示しています。その DialogFragment をキャンセルできないようにしたいと考えています。ダイアログのキャンセル可能なプロパティをfalseにしましたが、それでも影響はありません。

私のコードを調べて、解決策を提案してください。

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

6 に答える 6

29

ダイアログの構築を支援するためにアラート ビルダーを使用する場合 (そして、おそらくダイアログを DialogFragment 内にラップする場合)、getDialog().setCancelable(false) または Dialog.setCancelable(false) を使用しないでください。仕事。 公式の Android ドキュメントに記載されているように、以下のコードに示すように setCancelable(false) を使用します。

public void setCancelable (boolean cancelable)

API レベル 11 で追加されました。表示されているダイアログがキャンセル可能かどうかを制御します。DialogFragment はこれに基づいて動作を変更する必要があるため、Dialog.setCancelable(boolean) を直接呼び出す代わりにこれを使用してください。"

参照: 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;
}
于 2014-08-16T09:23:09.603 に答える
2

DialogFragment の簡単なソリューション

使用済み

dialog.setCanceledOnTouchOutside(false)
于 2020-03-31T10:26:18.170 に答える