【问题标题】:Android - Linear Layout default onClickListener that delegates clicks?Android - 委托点击的线性布局默认onClickListener?
【发布时间】:2019-11-22 16:39:58
【问题描述】:

我有一个地图视图,其中包含某些位置的一些引脚,每当按下某个位置时,就会显示底部的 LinearLayout 弹出窗口。

每当用户点击地图而不是弹出窗口时,弹出窗口就会被关闭。

我们有一个错误,即每当单击弹出窗口时,它也会被关闭,可能是因为该事件被委托给了第一响应者视图,即地图。

但是,不知何故,通过设置 . pupup.setOnClickListener(null) 修复了这个问题,不再委托点击事件。

我当然不明白这其中的逻辑,弹出窗口既没有来自 XML 也没有来自代码的任何侦听器,并且通过调试 hasOnClickListeners() 解析为 false 所以我不明白为什么再次将其设置为null 删除任何委托。

对此有何见解?

【问题讨论】:

  • 请包含您的代码和布局 xml。
  • @AlexKuzmin 不需要,参数很明确

标签: android android-linearlayout onclicklistener ontouchlistener delegation


【解决方案1】:

发生这种情况是因为基础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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多