SoI正在学习kotlin,现在我需要编写一个ArrayAdapter,但我在try 这样做时出现了一些错误:

convertView = vi.inflate(resource, null) 

kotlin is telling me

Val cannot be reassigned

在站点kotline中,我将java类转换为kotlin类,并try 在该站点中这样做.为什么会出现错误?我该如何修复?这是全部代码.

open class MyAdapter(context: Context, resource: Int, list: ArrayList<MyItems>) :
        ArrayAdapter<MyItems>(context, resource, list) {

    var resource: Int
    var list: ArrayList<MyItems>
    var vi: LayoutInflater

    init {
        this.resource = resource
        this.list = list
        this.vi = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    }


    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View? {
        var holder: ViewHolder

        if(convertView == null){
            convertView = vi.inflate(resource, null) //error in this line
            holder = ViewHolder()

            holder.image = convertView.findViewById(R.id.myImage) as ImageView?

            convertView.tag(holder) //error in this line

        } else {
            holder = convertView.tag as ViewHolder
        }

        return convertView
    }

    internal class ViewHolder {
        var image: ImageView? = null
    }

}

推荐答案

Parameter variable cannot be re-assigned, you will need to create a local variable to hold your returned view:

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View? {
    var holder: ViewHolder
    var retView: View

    if(convertView == null){
        retView = vi.inflate(resource, null)
        holder = ViewHolder()

        holder.image = retView.findViewById(R.id.myImage) as ImageView?

        retView.tag = holder

    } else {
        holder = convertView.tag as ViewHolder
        retView = convertView
    }

    return retView
}

Kotlin相关问答推荐

我可以在kotlin/java.util.scanner中跳过分隔符而不重复吗?

有没有一种简单的方法来识别物体?

如何让 LocalDateTime.parse 拒绝 24:00 时间

如何优雅地声明一个StateFlow?

在 detekt 配置文件中找不到某些属性

Rabin-Karp字符串匹配的实现(Rolling hash)

ActivityResultContracts TakePicture 结果总是返回 false

通过顺序多米诺骨牌操作列表管理对象的最佳方法是什么?

添加 Kapt 插件后 - 执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障

SpringBoot 2.5.0 对于 Jackson Kotlin 类的支持,请在类路径中添加com.fasterxml.jackson.module: jackson-module-kotlin

无法在 kotlin android 中以编程方式禁用 EditText

Kotlin - 来自 KType 的 KClass<*>

如何将vararg转换为list?

如何在Kotlin中创建填充空值的通用数组?

未找到导入 kotlinx.coroutines.flow.*

应用程序在使用 Google Play 服务时遇到问题

如何为 Java 调用者声明返回类型为void的 Kotlin Lambda?

Kotlin - 具有私有构造函数的类的工厂函数

旋转 kotlin 数组

为什么 Kotlin 会收到这样的 UndeclaredThrowableException 而不是 ParseException?