79

Android で戻るボタンを押したときに AlertDialog ボックスが閉じないようにしようとしています。私はこのスレッドで人気のある両方の方法に従いましたが、System.out.println を使用すると、どちらの場合でもコードが実行されることがわかります。ただし、戻るボタンはダイアログ ボックスを閉じます

私は何が間違っているのでしょうか?最終的に、戻るボタンがダイアログ ボックスを閉じないようにしようとしています。これは、アプリを初めて実行したときに表示される免責事項であり、ユーザーにオプションを持たせたくないのですが、[同意する] ボタンを押してください。アプリを続行するための注文。

4

7 に答える 7

182

setCancelable()次の機能を使用するだけです。

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(false);

これにより、戻るボタンでダイアログが閉じられなくなりますが、使用することを選択した場合は「否定」ボタンはそのまま残ります。


あなたの利用規約に同意したくないユーザーはホームボタンを押すことができますが、Squonk のコメントに照らして、ユーザー契約の「取り消し」を防ぐ方法が 2 つあります。1 つは単純な「拒否」ボタンで、もう 1 つはダイアログの [戻る] ボタンをオーバーライドします。

builder.setNegativeButton("Refuse", new OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int which) {
               finish();
           }
       })
       .setOnKeyListener(new OnKeyListener() {
           @Override
           public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
               if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP)
                   finish();
               return false;
           }
       });
于 2012-08-27T22:50:13.890 に答える
1

これだけが私のために働いた:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(title);
builder.setMessage(content);

/**
 * Make it when the Back button is pressed, the dialog isn't dismissed.
 */
builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
    @Override
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
            Utilities.makeToast(getContext(), "There is no way back!");
            return true; // Consumed
        }
        else {
            return false; // Not consumed
        }
    }
});

Dialog dialog = builder.create();

/**
 * Make it so touching on the background activity doesn't close the dialog
 */
dialog.setCanceledOnTouchOutside(false);

return dialog;

ご覧のとおりdialog.setCanceledOnTouchOutside(false);、ダイアログの外側をタップしてもダイアログが閉じないように、行も追加しました。

于 2016-07-16T12:15:10.760 に答える
0

setCancelable(false)[戻る] ボタンでダイアログ ボックスが閉じないようにするために追加します。

例えば ​​:

AlertDialog.Builder builder = AlertDialog.Builder(this)
Dialog dialog = builder.create()
dialog.setCancelable(false)
dialog.setCanceledOnTouchOutside(false)

これにより、ユーザーが [戻る] ボタンを押したり、ダイアログ ウィンドウの外に触れたりしたときに、ダイアログをキャンセルできなくなります。

于 2020-08-10T11:13:20.783 に答える