AlertDialog对话框的控制

1.场景:Dialog中有EditView输入框,当输入的内容不符合要求时,此时对话框不关闭

AlertDialog 并没有提供该方法,需要通过反射的方式去获取到源码中的方法,去自定义Dialog的关闭。

备注:AlertDialog.Builder 添加引用时注意,必须是 import android.support.v7.app.AlertDialog;可通过反射获取到getDeclaredField 参数为 mShowing

v4包下的Dialog反射获取不到 getDeclaredField

代码如下:

关闭Dialog

public void dialogClose(DialogInterface dialog) {
    try {
        Field field = dialog.getClass().getSuperclass().getSuperclass().getDeclaredField("mShowing");
        field.setAccessible(true);
        //  将mShowing变量设为false,表示对话框已关闭
        field.set(dialog, true);
        dialog.dismiss();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

不关闭Dialog

public void dialogNoClose(DialogInterface dialog) {
    try {
        Field field = dialog.getClass().getSuperclass().getSuperclass().getDeclaredField("mShowing");
        field.setAccessible(true);
        field.set(dialog, false);
        dialog.dismiss();
    } catch (Exception e) {
        e.printStackTrace();
   }
}

2.场景:Dialog中存在listview ,操作listview的item,当操作结束之后,需要自动关闭Dialog

在Dialog显示出后,获取到Dialog的对象,如:AlertDialog showDialog = dialog.show();

这次就可以随心所欲地在你需要的地方自动关闭Dialog

3.场景:当在Fragment中,弹出Dialog,此时需要获取到onKeyDown中的事件,做相应 的操作

Dialog中提供了setOnKeyListener监听,在show();方法之前,之后调用无法监听此时事件

代码如下:

builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
    @Override
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {

})
.create()
.show();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,062评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 7,335评论 0 17
  • Day1: 在代码中通过R.string.hello_world可以获得该字符串的引用; 在XML中通过@stri...
    冰凝雪国阅读 1,640评论 0 5
  • 今天有位朋友问我,我们怎么才能有自信心呢,尤其是对于女性来说,我们常常会被自己的情绪困扰,如何才能走出情绪的魔咒呢...
    籽绫阅读 308评论 0 1
  • 石神和靖子小姐是邻居,在寒冬雾蒙蒙的早晨,靖子赶着去便当店上班,在玄关不忘叮嘱女儿记得吃早餐,石神被对话声音“吵醒...
    29c59f1aa9a3阅读 739评论 0 1

友情链接更多精彩内容