我有一个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
并进行活动视图以消除这种接触。有办法吗?预先感谢!
编辑:为了更加清晰,我添加了一个屏幕截图:
我想要的是,当用户在对话框片段之外(即“等待”)和“注册”按钮(或任何其他按钮)内进行触摸时,我想显示一个警报对话框,并希望Sign Up的onClickListener消除该触摸。 / p>
答案 0 :(得分:1)
好吧,我想我有点理解您有两个对话框,当某人在第一个对话框之外单击时,您想打开另一个对话框。这是实现此目标的方法。
首先设置dialog.setCanceledOnTouchOutside(true);
,然后实现 cancel()监听器
dialog.setOnCancelListener(
new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
//Open another dialog here
}
});
最好使用此方法,而不要自己处理 onTouchEvent 。希望这有助于让我知道是否还有任何问题。如果有时间,我可能会写一些代码。干杯!