Андройд. Почему не получается повесить слушатель на всю разметку активити?

Пытаюсь повесить один слушатель на всю разметку, т.е. на 2 TextView элемента и одну кнопку, событие вешается на root. Код ниже. С TextView срабатывает, а вот для Button приходится делать отдельный слушатель. Почему так, ведь Button, также наследуется от View? Или я допускают ошибку в коде?

class TextExchangeActivity : AppCompatActivity() {
    private lateinit var textView: TextView;
    private lateinit var textViewTwo: TextView
    private lateinit var button: Button
    private lateinit var view: View
    private lateinit var binding: ActivityMainBinding


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        textView = binding.textView
        textViewTwo = binding.textView2
        button = binding.button
        view = binding.root

        fun change() {
            val textViewFirstText = textView.text
            val textViewSecondText = textViewTwo.text
            textView.text = textViewSecondText  //textViewTwo.text
            textViewTwo.text = textViewFirstText //textView.text

            val colorFirst = textView.background;
            val colorSecond = textViewTwo.background;
            textView.background = colorSecond;
            textViewTwo.background = colorFirst;
        }

        button.setOnClickListener {
            change()
        }
        view.setOnClickListener {
            change()
        }

   }
}

Ответы (2 шт):

Автор решения: woesss

View-иерархия не имеет никакого отношения к наследованию классов - дочерние элементы не наследуют слушатели от контейнера.
Контейнер сам их обрабатывает: в первую очередь делегирует дочернему элементу, по которому кликнули и только в том случае если клик не обработал ни один дочерний элемент, вызывает свой слушатель.
Кнопка должна подсвечиваться при нажатии, поэтому перехватывает клик в любом случае, даже если ей не назначен слушатель - поэтому слушатель, назначенный контейнеру не вызывается.

→ Ссылка
Автор решения: Wlad
  1. Вы используете binding. зачем вы binding.textView2 сокращаете до textViewTwo ?
    binding специально был создан для легкого и быстрого доступа к элементам с указанием лишь переменной самого binding'а.

  2. ваше view = binding.root - это не элемент, а абсолютная ВСЯ разметка (и пустое пространство в том числе).

→ Ссылка