欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android中AlertDialog 点击按钮后不关闭对话框的功能

程序员文章站 2022-04-18 18:37:27
这里的问题:当我点击确定按钮,也就是 alertdialog 里的 positivebutton 的时候,我们需要判断用户是输入是否符合我们的预期,如果不符合通常提示用...

Android中AlertDialog 点击按钮后不关闭对话框的功能

这里的问题:当我点击确定按钮,也就是 alertdialog 里的 positivebutton 的时候,我们需要判断用户是输入是否符合我们的预期,如果不符合通常提示用户重写输入,且不关闭当前的对话框,但上图中点击按钮后会自动的关闭窗口。

先看原来的这个是怎么写的:

private void opendialog() {
 linearlayout linearlayout = (linearlayout) layoutinflater.from(getcontext()).inflate(r.layout.change_password_dialog, null);
 final edittext originpasswordet = (edittext) linearlayout.findviewbyid(r.id.origin_password);
 textview forgetpassword = (textview) linearlayout.findviewbyid(r.id.forget_password);

 final alertdialog dialog = new alertdialog.builder(getcontext())
  .setview(linearlayout)
  .setpositivebutton("确定", new dialoginterface.onclicklistener() {
   @override
    public void onclick(dialoginterface dialog, int which) {
    string originpassword = originpasswordet.gettext().tostring().trim();
     //传到后台
    }
  })
  .create();

 dialog.show();
}

虽然图片里和代码的并不是同一个,但问题是一样的

setpositivebutton 方法中,即使我们没有调用 dialog.dismiss()

但对话框还是会自动的关闭,就算我们在 onclick 里判断输入的内容,错误的提示也会在窗口关闭后才出现。

在 alertdialog 提供的 api 中我也没有找到可以设置的地方,如果有还请告知。而我解决这个问题的办法:

final alertdialog dialog = new alertdialog.builder(getactivity())
  .settitle(msg)
  .setview(layout)
  .setnegativebutton("取消", new dialoginterface.onclicklistener() {
   @override
   public void onclick(dialoginterface dialog, int which) {
    dialog.dismiss();
   }
  })
  .setpositivebutton("submit",null)
  .setcancelable(true)
  .create();
dialog.show();

//为了避免点击 positive 按钮后直接关闭 dialog,把点击事件拿出来设置
dialog.getbutton(alertdialog.button_positive)
  .setonclicklistener(new view.onclicklistener() {

 @override
 public void onclick(view v) {
  pattern pattern = pattern.compile("[0-9]*");
  matcher matcher = pattern.matcher(edittext.gettext());
  if (!matcher.matches()){
   showtoast("请输入正确的 id");
   break;
  }
  dialog.dismiss();
  }
 }
});

setpositivebutton("submit",null) 监听事件传入 null

在调用 dialog.show() 后再设置 button 的点击事件,否则 getbutton() 会返回空

这样在我们手动调用 dialog.dismiss() 之前,对话框是不会关闭的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。