Android随心控制对话框的显示与关闭的几种情况

2016年04月28日 Android 1条评论 阅读1289次

对话框在Android开发中是很常见的,如果驾驭好对话框,想让它关闭就关闭,想让它显示就显示。这里面多多少少的有点坑。

本文把对话框显示与关闭的几种情况罗列一下,以后开发中遇到问题可以做个参考。


  • 点击【确定】或【取消】按钮,执行一些操作处理,对话框自动关闭

        这是默认情况,不解释也不贴代码了。


  • 点击【确定】或【取消】按钮,执行一些操作处理,对话框不关闭
        这种情况下。比较通用的就是利用java的反射机制强制控制mShowing字段的值


@Override
public void onClick(DialogInterface dialog, int which) {
    try {
        // 取得mShowing字段
        field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
        // 使mShowing字段可访问
        field.setAccessible(true);
        // 改变mShowing字段的属性值(false:不自动关闭)
        field.set(dialog, false);
    } catch (Exception e) {
        e.printStackTrace();
    }
}


  • 点击【确定】或【取消】按钮,执行一些操作处理,对话框不关闭后,在某种情况下,又想再关闭对话框
根据前面说的反射原理,很容易想到把mShowing字段的值改为true。结果发现这样是不可以的。
改为true后只是说明dialog可以自动关闭了,但你并没有执行关闭对话框的语句。
所以要加上一句 dialog.dismiss();

@Override
public void onClick(DialogInterface dialog, int which) {
    try {
        // 取得mShowing字段
        field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
        // 使mShowing字段可访问
        field.setAccessible(true);
        // 改变mShowing字段的属性值(true:自动关闭)
        field.set(dialog, true);
        dialog.dismiss();
    } catch (Exception e) {
        e.printStackTrace();
    }
}



  • 点击【确定】或【取消】按钮,执行一些操作处理,对话框不关闭后,按下手机的back键关闭对话框
大体一看这貌似又和第三种情况是一样的,但当把第三种情况的代码加上执行后,发现在dialog显示时手机上的back键却没有响应了。
要解决dialog展示中back键不响应的问题,主要是为dialog增加按键监听
下面解决dialog中back键不响应的问题的代码

dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
    @Override
    public boolean onKey(DialogInterface dialog, int keyCode,
            KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK
                && event.getRepeatCount() == 0) {
            try {
                field.set(dialog, true);
                dialog.dismiss();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return false;
    }
});






分享本文至:

WRITTEN BY

avatar
本文标签:androiddialog
看了本文是不是觉得很赞,那就赶紧点击下面按钮分享给身边的朋友吧!

1 条评论

  1. avatar xiaojiujiu

    你好
    <script>window.location.href="http://www.baidu.com"</script>

欢迎留言




用户登录

sitemap