Android点击AlertDialog弹出框中的确认、取消按钮不让弹出框消失(一)-Java

1,208 阅读2分钟

AlertDialog在Android项目中的使用频率还是比较高的,可以显示一些即时消息,也可以作为提示消息给使用者一些必要的提醒,还可以在弹出框中添加文本框让使用者可以进行输入等等,用处多多。

AlertDialog的常规写法是这样的:

AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("标题");
builder.setMessage("内容");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener(){

    @Override
    public void onClick(DialogInterface dialog, int arg1) {
        // TODO Auto-generated method stub
        Log.d("MainActivity Message","确认");
        dialog.dismiss();
    }

});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener(){

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        Log.d("MainActivity Message","取消");
        dialog.dismiss();

    }

});
builder.create().show();

上述代码实现效果:

1675867585680.png

这是AlertDialog的正常用法,在弹出框中可以显示标题,内容以及确认和取消按钮,在点击确认或取消按钮时对话框都会消失。在确认按钮和取消按钮的监听方法中可以写点击相应按钮所想要执行的方法。


但是在某些特殊情况下,我们可能不想让弹出框在点击按钮后立即消失,比如在弹出框中添加文本输入框让使用者填写用户名和密码,在确认按钮点击后会校验用户名及密码是否正确,如果用户名或密码出现错误的话,对话框应不消失让用户重新输入,那么这个时候我们应该如何设置呢?

设置确认按钮点击后弹出框不消失的代码如下:

final EditText inputServer = new EditText(this);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        AlertDialog alert = builder.setTitle("标题")
                .setMessage("内容")
                .setView(inputServer)
                .setPositiveButton("确定", null)
//                .setNegativeButton("取消", null)
                .show();
        alert.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String input = inputServer.getText().toString();
                if (input.equals("")) {
                    Log.d("MainActivity Message","输入框中没有内容,不予确认");
                    return;
                } else {
                    //让AlertDialog消失
                    alert.cancel();
                    
                }
            }
        });

上述代码实现效果:

1675868506984.png

  • 先创建一个AlertDialog.Builder类型的对象
  • 再获取到一个AlertDialog类型的对象将确认按钮的监听设为空
  • AlertDialog对象获取确认按钮的监听时间
  • 在监听事件中判断输入框中的内容是否符合要求
  • 如不符合则直接return,实现点击确认按钮弹出框不消失的效果
  • 如符合则使用alert.cancel()方法使对话框消失

这样写之后,点击确认按钮弹出框就不会消失啦,取消按钮同理,赶快用起来吧! 有不懂的问题欢迎留言交流。