阻止后退按钮关闭对话框

Cap*_*rog 64 android back

我想在Android中按下后退按钮时阻止关闭AlertDialog框.我已经遵循了这个线程中的两个流行方法,并且使用System.out.println,我可以看到在两种情况下代码都会执行.但是,后退按钮仍然会关闭对话框.

我能做错什么?最终我试图阻止后退按钮关闭一个对话框 - 它是一个免责声明,在第一次运行应用程序时显示,我不希望用户有任何选项,但按下"接受"按钮该应用程序的订单继续.

Sam*_*Sam 155

只需使用该setCancelable()功能:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(false);
Run Code Online (Sandbox Code Playgroud)

这可以防止后退按钮关闭对话框,但如果您选择使用它,则会保留"否定"按钮.


虽然任何不想接受您的服务条款的用户可以根据Squonk的评论推送主页按钮,但这里还有两种方法可以阻止他们"退出"用户协议.一个是简单的"拒绝"按钮,另一个覆盖对话框中的后退按钮:

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;
           }
       });
Run Code Online (Sandbox Code Playgroud)

  • 另外,如果使用`DialogFragment`,你应该对它调用`setCancelable`而不是`Dialog`本身 (31认同)

fal*_*ojr 19

要防止后退按钮关闭对话框(不依赖于Activity),只需以下代码:

alertDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
    @Override
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
        // Prevent dialog close on back press button
        return keyCode == KeyEvent.KEYCODE_BACK;
    }
});
Run Code Online (Sandbox Code Playgroud)


Ogn*_*yan 11

使用时,DialogFragment您需要调用setCancelable()片段,而不是对话框:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    dialog = new ProgressDialog(getActivity());
    dialog.setIndeterminate(true);
    dialog.setMessage(...);
    setCancelable(false);

    return dialog;
}
Run Code Online (Sandbox Code Playgroud)

呼叫dialog.setCancelable()似乎没有效果.似乎DialogFragment没有注意到对话框的可取消性设置.