web-dev-qa-db-ja.com

AlertDialogのsetCancelable(false)メソッドが機能しない

正常に機能するAlertDialogを作成しました。を押すと消えます:
1)キーボードボタンをエスケープするか、
2)マウスを使用して戻るボタン
上記の条件に集中し続けるために、ビルド中に '.setCancelable(false)'ステートメントを追加しました。しかし、私はまだダイアログが消えるのを見ます。問題はどこにありますか?助けてください。

追加されたコード:

return new AlertDialog.Builder(getActivity())
                .setIcon(R.drawable.alert_dialog_icon)
                .setTitle(title)
                .setCancelable(false)
                .setPositiveButton(R.string.alert_dialog_ok,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            ((FragmentAlertDialog)getActivity()).doPositiveClick();
                        }
                    }
                )
                .setNegativeButton(R.string.alert_dialog_cancel,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            ((FragmentAlertDialog)getActivity()).doNegativeClick();
                        }
                    }
                )
                .create();


環境:Android 4.0 on XP Professional。

60
lupchiazoem

this は完全なコードですか? setCancelable(false)を設定するためのコードを次のように変更してください

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

ダイアログはキャンセル不可に設定されていますが、ホストフラグメントはまだキャンセル可能です。 setCancelable(false)でフラグメントを設定します。

12
Green

別の実例:

ステップ1

クラスを作成します。

_public class DialogActivity extends Android.app.DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(R.string.myMessage);
        setCancelable(false);
        return builder.create();
   }
}
_

ステップ2

メソッドをActivityに追加します。

_private boolean showDialog() {
    FragmentManager manager = getFragmentManager();
    DialogActivity dialogActivity;
    dialogActivity = new DialogActivity();
    dialogActivity.show(manager, "DialogActivity");
    return true;
}
_

ステップ

ダイアログを表示する必要がある場合は、showDialog()を呼び出します

7
_dialog.setCanceledOnTouchOutside(false);
_

setCanceledOnTouchOutside(boolean)

ウィンドウの境界の外側をタッチしたときにこのダイアログをキャンセルするかどうかを設定します。 trueに設定すると、ダイアログはまだ設定されていない場合、キャンセル可能に設定されます。

5
DoruChidean

「setCancelable」を実装する最も簡単な方法は、アクティビティでダイアログを呼び出すときに同じものを実装することです。そのようにして、直接ダイアログクラスではありません。

 Dialog myDialog = new Dialog();
        myDialog.setCancelable( false );
        myDialog.show( getSupportFragmentManager(),"dialog" );
        return true;
1
Laiane Oliveira

ダイアログを非表示にするためのKotlin

dialog.isCancelable =false
0