如何正确获取分配给按钮的片段的 ID

How to properly get the ID of the fragment the button is assigned to

btn.setOnCheckedChangeListener { _, isChecked ->
        if(isChecked){
            //instance of a list
             spotsProvider.spotsList?.find { spots.ID.equals(spots.ID)}?.likes = spots.likes + 1
            numLikes.text = spots.likes?.toString()

            //refreshFragment(btn.context)
        }
            Toast.makeText(btn.context, if(isChecked) spots.ID.toString() else "do something", Toast.LENGTH_SHORT).show()
        render(spots)
        }

它从 list/Or 个卡片片段生成几个片段,这些片段有一个赞按钮 How it looks 上面的函数应该 return 所选的 ID card/fragment 并像下面的计数器一样修改它。

点赞计数器以及图像和名称是从列表中提供给它的,函数应该使用列表中的 ID 参数修改该列表,注意该列表在另一个 class

列表:

var spotsList = mutableListOf (
        Spots(
            "Volcan Cerro Negro1",
            0,
            "https://www.visitcentroamerica.com/wp-content/uploads/2020/02/ver-centroamerica-nicaragua-volc%C3%A1n-cerro-negro-08.jpg",
            1
        ),
        Spots(
            "Volcan Cerro Negro2",
            0,
            "https://static.dw.com/image/56796908_403.jpg",
            2
        ),
        Spots(
            "Volcan Cerro Negro3",
            0,
            "https://ichef.bbci.co.uk/news/624/amz/worldservice/live/assets/images/2015/12/02/151202170824_la_ltima_vez_que_el_momotombo_entr_en_actividad_eruptiva_fue_en_1905_624x351_ap_nocredit.jpg",
            3
        ),
        Spots(
            "DC",
            0,
            "https://cursokotlin.com/wp-content/uploads/2017/07/wonder_woman.jpg",
            4
        )

试图检查它是否正确读取 ID,似乎卡在 ID 1 上并且没有注册其他类似按钮,例如 this,但是使用 toast 功能时它似乎知道哪个 ID该按钮属于。

感谢高级:)

我不知道你想做什么,但是 Toast 没有检查与按钮有关的任何事情 - 无论 spots 是什么(它是在这个按钮的点击侦听器之外定义的),它只是打印 ID 的那个。如果您所有的听众都引用该变量,他们都会看到相同的东西,具有相同的 ID

另外 find { spots.ID.equals(spots.ID) } 再次使用 spots 并将其与自身进行比较,因此谓词始终 returns 为真,您将获得列表中的第一项。然后将其 likes 设置为 spots.likes + 1 而不是增加其自身的 likes 值。

你可能想要这样做,假设 spots 是你试图在列表中找到的 Spot:

// 'it' is the default name for the variable being passed in,
// i.e. the item in the list you're currently checking - you're looking for a match
spotsProvider.spotsList?.find { it.ID.equals(spots.ID) }?.likes += 1

这可能足以修复它,如果每个按钮都有自己的东西(比如 ViewHolder)并且有自己的 spots