AlertDialog通过反射机制阻止Dialog关闭

在开发Android应用程序时,我们可能会用到需要用户输入的Dialog,如登录对话框等。这时候,如果用户没有输入登录信息而点击<确定>按钮时,我们并不希望登录Dialog消失,而是采用一个Toast提示用户没有输入登录信息。在这里,我就向大家介绍下Dialog通过反射机制阻止Dialog关闭。

在我们创建Dialog时,在Dialog的按钮点击事件处理中做如下处理

[java] view plain copy
  1. <prename="code"class="java"><prename="code"class="java">LayoutInflaterinflater=LayoutInflater.from(this);
  2. finalViewtextEntryView=inflater.inflate(
  3. R.layout.f_alert_dialog_takeeffect,null);
  4. AlertDialog.Builderbuilder=newAlertDialog.Builder(context);
  5. builder.setIcon(android.R.drawable.ic_dialog_alert);
  6. builder.setView(textEntryView);
  7. builder.setTitle(profileSettingList[settingId]);
  8. //确定按钮点击事件处理
  9. builder.setPositiveButton(R.string.btn_OK,
  10. newDialogInterface.OnClickListener(){
  11. publicvoidonClick(DialogInterfacedialog,intwhichButton){
  12. Fieldfield=null;
  13. try{
  14. //通过反射获取dialog中的私有属性mShowing
  15. field=dialog.getClass().getSuperclass()
  16. .getDeclaredField("mShowing");
  17. field.setAccessible(true);//设置该属性可以访问
  18. }catch(Exceptione){
  19. }
  20. EditTextmessage_edit=(EditText)textEntryView
  21. .findViewById(R.id.usermessage_edit);
  22. Stringmessage=String.valueOf(message_edit.getText());
  23. if(null==message||"".equals(message)){
  24. try{
  25. //输入框中内容为空,dialog不关闭
  26. field.set(dialog,false);
  27. dialog.dismiss();
  28. }catch(Exceptione){
  29. }
  30. //提示用户输入登录信息
  31. Toast.makeText(getApplicationContext(),
  32. R.string.pleaseenter_message,
  33. Toast.LENGTH_LONG).show();
  34. }else{
  35. try{
  36. //可以关闭
  37. field.set(dialog,true);
  38. dialog.dismiss();
  39. }catch(Exceptione){
  40. }
  41. //登录业务处理</pre><br>
  42. <br>
  43. <pre></pre>
  44. <pre></pre>
  45. <p></p>
  46. <p></p>
  47. <pre></pre>
  48. <pre></pre>
  49. <pre></pre>
  50. <pre></pre>
  51. <pre></pre>
  52. <pre></pre>
  53. <pre></pre>
  54. </pre>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值