有时候 我们做项目的时候,需要对方在弹出的对话框中输入正确的验证吗,这种情况下,为了有较好的用户体验,那么点击对话框的外面,对话框就不能消失 ,就得用对话框的 那我们就需要用的对话框的另外一个方法 .setCancelable(false)当用户输入的验证码不正确的时候,点击确定按钮,对话框不消失,我用的是java的反射机制。
下面贴上代码供大家批评啊:
public void CheckingCode()
{
final EditText editText = new EditText(WelcomeActivity.this);
new AlertDialog.Builder(WelcomeActivity.this)
.setTitle("请输入验证码")
.setIcon(android.R.drawable.ic_dialog_info)
.setView(editText) //创建一个输入的对话框
.setCancelable(false) //这句话很重要,加上它,点击对话框外边,对话框就不会消失
.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
try {
String code = editText.getText().toString();
Field field = null;
if(code.equals("123"))
{
handler.sendEmptyMessage(2);
//下面的这个很重要哦,通过java反射机制得到对话框父级别的“mshowing”方法
field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
//设置为true,那么点击确定对话框剧不会消失,相反对话框才会消失(如下面的else语句)
field.set(dialog, true);
}
else
{
field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, false);
Toast.makeText(WelcomeActivity.this, "亲,您输入的验证码不正确!", 1000).show();
}
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
})
.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, true);
} catch (Exception e) {
e.printStackTrace();
}
}
} )
.show();
}