美文网首页
AlertDialog对话框的控制

AlertDialog对话框的控制

作者: 火星局 | 来源:发表于2018-04-19 15:14 被阅读0次

    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();
    

    相关文章

      网友评论

          本文标题:AlertDialog对话框的控制

          本文链接:https://www.haomeiwen.com/subject/liuwkftx.html