如何正确获取分配给按钮的片段的 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
值
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