对于正常的情况下,如果我们点击OK或者Cancle的话,对话框都会关闭,这是应为它的内部都调用了dismiss();
但是现在需求是如果我们输入的用户名或者密码不正确,我们的对话框不关闭,直到我们输入的用户名和密码完全正确,才关闭。
这时我们就需要欺骗系统了。要想查看里面的实现原理,自己去看源码去,其实很简单的。下面只是作为我的笔记,以后忘了可以回来查看的。
/**
* 假设对话框已经关闭,欺骗系统,以保持输入窗口
* @param mDialogLongInterface 点击对话框按钮事件传进来的mDialogInterface参数
*/
public static void keepDialog(DialogInterface mDialogLongInterface){
try {
Field field=mDialogLongInterface.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);//将mShowing设置为false表示对话框已关闭
field.set(mDialogLongInterface,false);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 销毁对话框
* @param mDialogInterface
*/
public static void closeDialog(DialogInterface mDialogInterface){
try {
Field field=mDialogInterface.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(mDialogInterface, true);
mDialogInterface.dismiss();
} catch (Exception e) {
e.printStackTrace();
}
}
在确定按钮的onClick点击事件的方法中添加keepDialog(***);
//如果输入的信息正确直接调用closeDialog(***);
在取消按钮的onClick点击事件的方法中添加closeDialog(***);
这样就噢啦。
大概代码如下:(就按照如下的方式去写就行了)
new AlertDialog.Builder(MainActivity.this)
.setTitle(r.getString(“提示”)
.setMessage(“Message”)
.setPositiveButton(“确定”),new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if("输入正确"){
closeDialog(dialog);
}else{
keepDialog(dialog);
}
}
}).show();