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)