我有一个带有某些位置的某些引脚的Map视图,每当按下某个位置时,都会显示底部的LinearLayout弹出窗口。
[每当用户单击地图但不单击弹出窗口时,弹出窗口均被关闭。
[我们有一个错误,每当单击弹出窗口时,它也会被关闭,这可能是因为该事件被委托给了第一个响应者视图,即地图。
但是,通过某种方式,通过设置。 pupup.setOnClickListener(null)
解决了该问题,不再委托点击事件。
我当然不理解其逻辑,弹出窗口既没有来自XML或代码的任何侦听器,并且通过调试hasOnClickListeners()
解析为false
,所以我不明白为什么将其再次设置为[ C0]删除任何委托。
对此有何见解?
之所以这样,是因为无论您设置还是删除null
,基本View.setOnClickListener
都会将视图转换为clickable
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;
}