为什么我的按钮视图ID在运行时更改?

我正在尝试用Kotlin编写一个简单的Android应用程序,以更改不同视图的颜色。

我有以下代码来初始化视图和单击侦听器(当然,较早时是私有的Lateinit声明):

private fun setListeners()
{
    boxOneText = findViewById(R.id.box_one_text)
    boxTwoText = findViewById(R.id.box_two_text)
    boxThreeText = findViewById(R.id.box_three_text)
    boxFourText = findViewById(R.id.box_four_text)
    boxFiveText = findViewById(R.id.box_five_text)

    btnRed = findViewById(R.id.button_red)
    btnYellow = findViewById(R.id.button_yellow)
    btnBlue = findViewById(R.id.button_blue)

    val rootLayout = findViewById<View>(R.id.constraint_layout)

    // Set click listener for all text views
    val views = listOf<View>(boxOneText, boxTwoText, boxThreeText, boxFourText, boxFiveText, rootLayout)
    views.map { view -> view.setOnClickListener { makeColored(it) } }

    // Set click listener for all buttons
    val buttons = listOf(btnRed, btnYellow, btnBlue)
    buttons.map { button -> button.setOnClickListener { makeSpecificColor(it, views) } }
}

设置各个TextViews颜色的代码如下所示,并且可以正常工作(忽略box_two的lockdown_earth条目,我正在玩弄的东西):

private fun makeColored(view: View)
{
    when(view.id)
    {
        R.id.box_one_text -> view.setBackgroundColor(Color.DKGRAY)
        R.id.box_two_text -> view.setBackgroundResource(R.drawable.lockdown_earth)
        R.id.box_three_text -> view.setBackgroundColor(Color.BLUE)
        R.id.box_four_text -> view.setBackgroundColor(Color.MAGENTA)
        R.id.box_five_text -> view.setBackgroundColor(Color.BLUE)
        else -> view.setBackgroundColor(Color.LTGRAY)
    }
}

但是,以下更改所有TextView(包括rootLayout)颜色的代码不起作用:

private fun makeSpecificColor(view: View, views: List<View>)
{
    // TODO For some reason the id doesn't match??
    val color = when(view.id)
    {
        R.id.button_yellow -> R.color.my_yellow
        R.id.button_red -> R.color.my_red
        R.id.button_blue -> R.color.my_blue
        else -> R.color.colorPrimary
    }

    views.map { it.setBackgroundColor(color) }
}

正如我的TODO所暗示的,由于某种原因,视图ID不同于clickListener触发之前的视图ID,因此始终输入“ else”。我已在调试模式下运行此命令,并且传递的ID与整个应用程序中的任何视图都不匹配。是否以某种方式分配了新的ID?如果是这样,为什么TextViews与它们的侦听器一起使用?

是因为我在按钮列表上使用了map吗?我有点盲目地用它代替for循环。