android - ArrayAdapter 使用 Kotlin android

所以我正在学习 kotlin,现在我需要编写一个 ArrayAdapter,但是在尝试这样做时出现了一些错误:

convertView = vi.inflate(resource, null) 

kotlin 告诉我

Val cannot be reassigned

在站点 kotline 中,我将 java 类转换为 kotlin 类并尝试在此站点中做类似的事情。为什么会出现错误,我该如何解决?这是整个代码。

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
    }

}

最佳答案

参数变量不能重新赋值,你需要创建一个局部变量来保存你返回的 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
}

https://stackoverflow.com/questions/41923557/

相关文章:

android - Kotlin 惰性属性和值重置 : a resettable lazy dele

java - 如何使用 Maven 编译 Java+Kotlin 项目?

eclipse - 无法在 Eclipse 中运行 Kotlin 应用程序

java - Kotlin - 为非数据类生成 toString()

kotlin - 让 Kotlin 在将灵活/平台类型分配给非空类型时发出警告?

kotlin - 协程 : runBlocking vs coroutineScope

kotlin - 如何在 Kotlin 中运行编译的类文件?

arrays - Kotlin 中的二维数组

kotlin - 什么是 Kotlin 模块?

kotlin - 0xFF0000FF 整数文字不符合预期的类型 kotlin.Int