android中AlertDialog的上的按钮,点击后不关闭对话框的方法

Android中的弹出框在被点击时, 无论点击哪个按钮都会关闭窗口。

但是有的情况下我们不需要立即关闭窗口。下面的情况是弹出框中要求用户输入文件名,
并在点击确定时检查文件名的合法性, 不合法则提示用户重新输入, 弹出框要保持在界面上
解决方法:使用反射

此要写在setNegativeButton或setPositiveButton等setButton的OnClickListener的OnClick里,且每个按钮都要单独写一次,因为对mDialog的field的改变相对于此对象来说是全局的

// 不关闭的写法
try
{
    Field field = mDialog.getClass().getSuperclass().getDeclaredField("mShowing");
    field.setAccessible(true);
     //设置mShowing值,欺骗android系统
    field.set(mDialog, false);
}catch(Exception e) {
    e.printStackTrace();
}

// 关闭的写法
try
{
    Field field = mDialog.getClass().getSuperclass().getDeclaredField("mShowing");
    field.setAccessible(true);
     //设置mShowing值,欺骗android系统
    field.set(mDialog, true);
} catch(Exception e) {
    e.printStackTrace();
}

posted @ 2012-03-27 17:51  日光之下无新事  阅读(2806)  评论(0编辑  收藏  举报