现在的位置: 首页 > 综合 > 正文

关于对话框点击外面消失

2014年03月25日 ⁄ 综合 ⁄ 共 1725字 ⁄ 字号 评论关闭
          有时候 我们做项目的时候,需要对方在弹出的对话框中输入正确的验证吗,这种情况下,为了有较好的用户体验,那么点击对话框的外面,对话框就不能消失 ,就得用对话框的 那我们就需要用的对话框的另外一个方 .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(); 
     }


 

抱歉!评论已关闭.