有时候 我们做项目的时候,需要对方在弹出的对话框中输入正确的验证吗,这种情况下,为了有较好的用户体验,那么点击对话框的外面,对话框就不能消失 ,就得用对话框的 那我们就需要用的对话框的另外一个方法 .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(); }