Android中AlertDialog 点击按钮后不关闭对话框的功能
程序员文章站
2022-04-18 18:37:27
这里的问题:当我点击确定按钮,也就是 alertdialog 里的 positivebutton 的时候,我们需要判断用户是输入是否符合我们的预期,如果不符合通常提示用...
这里的问题:当我点击确定按钮,也就是 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()
之前,对话框是不会关闭的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: 严嵩为了得到《清明上河图》,杀了多少人?