Android - 委托点击的线性布局默认 onClickListener?
Android - Linear Layout default onClickListener that delegates clicks?
我有一个地图视图,其中包含某些位置的一些图钉,每当按下某个位置时,就会显示底部的 LinearLayout 弹出窗口。
只要用户点击地图而不是弹出窗口,弹出窗口就会消失。
我们有一个错误,每当单击弹出窗口时,它也会被关闭,可能是因为事件被委托给第一响应者视图,即地图。
但是,不知何故,通过设置 . pupup.setOnClickListener(null)
修复了该问题,不再委托点击事件。
我当然不明白这个逻辑,弹出窗口没有来自 XML 或代码的任何侦听器,并且通过调试 hasOnClickListeners()
解析为 false
所以我不明白为什么再次将其设置为 null
会删除任何委派。
对此有何见解?
发生这种情况是因为基础 View.setOnClickListener
将视图转换为 可点击 ,无论您设置还是删除 OnClickListener
/**
* Register a callback to be invoked when this view is clicked. If this view is not
* clickable, it becomes clickable.
*
* @param l The callback that will run
*
* @see #setClickable(boolean)
*/
public void setOnClickListener(@Nullable OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}
移除不需要的委派的更好方法是调用
popup.setClickable(true)
我有一个地图视图,其中包含某些位置的一些图钉,每当按下某个位置时,就会显示底部的 LinearLayout 弹出窗口。
只要用户点击地图而不是弹出窗口,弹出窗口就会消失。
我们有一个错误,每当单击弹出窗口时,它也会被关闭,可能是因为事件被委托给第一响应者视图,即地图。
但是,不知何故,通过设置 . pupup.setOnClickListener(null)
修复了该问题,不再委托点击事件。
我当然不明白这个逻辑,弹出窗口没有来自 XML 或代码的任何侦听器,并且通过调试 hasOnClickListeners()
解析为 false
所以我不明白为什么再次将其设置为 null
会删除任何委派。
对此有何见解?
发生这种情况是因为基础 View.setOnClickListener
将视图转换为 可点击 ,无论您设置还是删除 OnClickListener
/**
* Register a callback to be invoked when this view is clicked. If this view is not
* clickable, it becomes clickable.
*
* @param l The callback that will run
*
* @see #setClickable(boolean)
*/
public void setOnClickListener(@Nullable OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}
移除不需要的委派的更好方法是调用
popup.setClickable(true)