【问题标题】:Create extension function to assign resource to ImageView with Kotlin使用 Kotlin 创建扩展函数以将资源分配给 ImageView
【发布时间】: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


【解决方案1】:

应该是这样的:

    fun ImageView.imageCardAssignation(imageSelected: Int): Int {

    return when(imageSelected){
        0 -> R.drawable.card_amazon
        1 -> R.drawable.card_card
        2 -> R.drawable.card_house
    }

}

我假设“R.drawable.card_amazon”是一个Int,否则返回类型会错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多