对话框应用反射销毁

  /**
     * 设置对话框是否打开
     * @param dialog 对话框
     * @param isOpened true:对话框开着,false:对话框关闭
     */
    private void dialogIsOpened(DialogInterface dialog, boolean isOpened) {
        Class clzDialog=dialog.getClass();
        //clzDialog=class android.app.AlertDialog
        System.out.println("clzDialog=" + clzDialog);
        Class clsSuperDialog=clzDialog.getSuperclass();
        System.out.println("clsSuperDialog="+clsSuperDialog);

        try {
            //得到Dialog类中的成员变量 private boolean mShowing = false;对应的Field类型的对象
            //如果mShowing=true则对话框可以关闭,false:表示对话框不可以关闭
             Field field_mShowing=clsSuperDialog.getDeclaredField("mShowing");
            //是否取消java语法检查,true:是,false: 否
            field_mShowing.setAccessible(true);
            //给mShowing赋值
            field_mShowing.set(dialog,isOpened);


            //正常的赋值:dialog.mShowing=isOpened;
            //通过反射的赋值方式为:mShowing.set(dialog,isOpened);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  

posted @ 2015-12-28 17:52  呼啦啦,,啦啦呼呼  阅读(193)  评论(0编辑  收藏  举报