-1

I have a Map view with some pins of certain locations, whenever a location is pressed a bottom LinearLayout popup is displayed.

Whenever the user clicks on the map but not on the popup, the popup is dismissed.

We have a bug, that whenever the popup is clicked, it is also dismissed, probably because the event is delegated to the first responder view, which is the map.

However, somehow, by setting . pupup.setOnClickListener(null) fixes the issue and click events are no longer delegated.

I certainly does not understand the logic on this, the popup didn't have any listener neither from XML or Code, and by debugging hasOnClickListeners() resolves to false so I don't get why by setting it again to null removes any delegation.

Any insight on this?

htafoya
  • 18,261
  • 11
  • 80
  • 104

1 Answers1

0

This happens because the base View.setOnClickListener converts the view to clickable, whether you set or remove the 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;
    }

A better approach to remove unwanted delegation would be to call

popup.setClickable(true)
htafoya
  • 18,261
  • 11
  • 80
  • 104