【发布时间】:2020-04-30 18:12:55
【问题描述】:
我开始使用 Kotlin 有趣的扩展。 我创建了一些对我来说可以正常工作,但我有一个 ImageView 上下文不起作用,我不明白为什么。
扩展功能是这样的:
fun ImageView.imageCardAssignation(imageSelected: Int): Int {
when(imageSelected){
0 -> R.drawable.card_amazon
1 -> R.drawable. card_card
2 -> R.drawable. card_house
}
return imageSelected
}
这个想法是,根据您作为参数传递的数字 (Int),将一个或另一个图像分配给 ImageView。
我调用它如下:
vb.selectImage.setImageResource (imageCardAssignation (0))
但是ID提示错误:
- none of the following candidates is applicable because os receiver type mismatch
我认为上下文必须是 ImageView
我做错了什么?
非常感谢和问候。
【问题讨论】:
-
您没有使用
imageCardAssignation作为扩展函数。扩展函数会被称为vb.selectImage.imageCardAssignation(0) -
我明白了,但是在这种情况下,以正确的方式调用扩展函数:vb.selectImage.imageCardAssignation (0) 你将如何应用setImageResource?
-
vb.selectImage.setImageResource(vb.selectImage.imageCardAssignation (0))或vb.selectImage.run { setImageResource(imageCardAssignation(0)) } -
写一个为你调用
setImageResource的扩展函数会更简洁。fun ImageView.setImageIndex(index: Int) { setImageResource( when(index) { /* */ } ) }您现在拥有该功能的方式,它甚至不需要是扩展,因为您不使用 ImageView 参数来做任何事情。此外,您需要将return移动到when之前,因为您当前正在丢弃when语句的结果。它需要一个else分支。
标签: android kotlin imageview extension-function