Android Material UI对话框:点击确定按钮时保持弹窗不关闭
实现AlertDialog点击确定按钮不关闭的方法
核心问题分析
默认情况下,setPositiveButton设置的点击监听器会在执行后自动触发对话框关闭逻辑,再加上你原代码中主动调用了dialog.dismiss(),这两个原因导致弹窗被强制关闭。
解决方案步骤
- 初始化Dialog时,将PositiveButton的点击监听器设为
null,避免系统自动触发关闭行为。 - 手动获取Dialog的PositiveButton实例,自定义点击事件,仅在验证码验证成功时调用
dialog.dismiss()关闭弹窗。
修改后的完整代码
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext()) .setTitle("Verifikasi email") .setIcon(R.drawable.icons8_checkmark) .setMessage("message") .setView(viewDig) .setPositiveButton("OK", null); // 先设置空监听器,规避系统自动关闭逻辑 builder.setCancelable(false); AlertDialog dialog = builder.show(); // 获取确定按钮并设置自定义点击逻辑 Button positiveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE); positiveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 拼接输入的验证码 StringBuilder sb = new StringBuilder(); for (EditText editText : editTexts) { sb.append(editText.getText().toString()); } String verNum = sb.toString(); if (verNum.equals(activation)){ // 验证成功,执行业务逻辑后关闭弹窗 dialog.dismiss(); // 此处添加验证成功后的操作 }else{ // 验证失败,保留弹窗并给出提示 Toast.makeText(getContext(), "验证码错误,请重新输入", Toast.LENGTH_SHORT).show(); // 可选:清空输入框并将焦点移至第一个输入框 for (EditText editText : editTexts) { editText.setText(""); } if (!editTexts.isEmpty()) { editTexts[0].requestFocus(); } } } });
补充说明
这种方式完全掌控了对话框的关闭时机,只有在验证码验证通过时才会关闭弹窗;验证失败时可以保留弹窗状态,同时给出明确的错误提示,优化用户输入体验。
内容的提问来源于stack exchange,提问作者NewbieMF
相关产品推荐
相关产品推荐

