对话框片段和取消对活动视图的触摸

时间:2019-08-25 12:49:54

标签: android kotlin android-dialogfragment

我有一个activity和一个dialog fragment。我要做的是当显示dialog fragment且用户在对话框片段之外单击以显示Alert dialog时。

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    return object: Dialog(activity!!, theme) {
        override fun onTouchEvent(event: MotionEvent): Boolean {
            if (MotionEvent.ACTION_OUTSIDE == event.action) {
                presentAlertDialog()
                return true
            }

            return super.onTouchEvent(event)
        }

    }.apply {
        setCanceledOnTouchOutside(false)
        setCancelable(false)

        window?.apply {
            setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL)
            setFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH)
        }
    }

如果在用户clicked处没有activity处的视图,则没有问题。但是,当用户单击该点时有一个视图(例如button),则同时调用alert dialog和该视图的onClickListener。我要做的只是显示alert dialog并进行活动视图以消除这种接触。有办法吗?预先感谢!

编辑:为了更加清晰,我添加了一个屏幕截图:

enter image description here

我想要的是,当用户在对话框片段之外(即“等待”)和“注册”按钮(或任何其他按钮)内进行触摸时,我想显示一个警报对话框,并希望Sign Up的onClickListener消除该触摸。 / p>

1 个答案:

答案 0 :(得分:1)

好吧,我想我有点理解您有两个对话框,当某人在第一个对话框之外单击时,您想打开另一个对话框。这是实现此目标的方法。

首先设置dialog.setCanceledOnTouchOutside(true);,然后实现 cancel()监听器

dialog.setOnCancelListener(
    new DialogInterface.OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {
            //Open another dialog here
        }
    });

最好使用此方法,而不要自己处理 onTouchEvent 。希望这有助于让我知道是否还有任何问题。如果有时间,我可能会写一些代码。干杯!