【问题标题】:Unresolved reference: userID in Kotlin, possible issue with data binding, help needed please未解决的参考:Kotlin 中的用户 ID,数据绑定可能存在问题,需要帮助
【发布时间】:2022-11-15 23:24:27
【问题描述】:

我一直在查看关于该主题的其他类似帖子,但由于我目前正在深入学习 Kotlin,所以我想讨论问题、解决方案以及如果可能的话为什么会发生。

我收到以下错误:

C:\Users\Paul\Documents\Projects\DataApp\app\src\main\java\com\example\dataapp\MyAdapter.kt: (19, 31): 未解析的引用:userId

这是代码示例,问题发生在 ViewHolder 类中:

package com.example.dataapp

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView

class MyAdapter (val context: Context, val userList: List<MyDataItem>): RecyclerView.Adapter<MyAdapter.ViewHolder>() {
    class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
        var userId: TextView
        var title: TextView

        init {
            userId = itemView.userId
            title = itemView.title
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        var itemView = LayoutInflater.from(context).inflate(R.layout.row_items, parent, false)
        return ViewHolder(itemView)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.userId.text = userList[position].userId.toString()
        holder.title.text = userList[position].title
    }

    override fun getItemCount(): Int {
        return userList.size
    }

}

在 XML 中,我设置了两个带有 userId 和标题 id 的文本字段:

但是我都收到了这个未解决的错误。我仍在努力学习我在 Kotlin 和 Android 方面的知识,而且还很新,所以毫无疑问会是一些非常基础的东西。

我到目前为止:

仔细检查语法匹配 检查我是否正确绑定 - 我相信这就是问题所在。我正在关注一个不使用绑定的教程,只是使用'R.layout.activity_main'引用但是我使用的是binding.root - 这可能是问题吗?

这是 GitHub 存储库的链接 - https://github.com/Code4Wyatt/FetchDataKotlin

感谢您的任何帮助!如果需要更多信息,请告诉我。

【问题讨论】:

    标签: android kotlin android-recyclerview binding retrofit


    【解决方案1】:

    您启用了 DataBinding/ViewBinding,但实际上并没有使用它。

    buildFeatures {
        dataBinding true
        viewBinding true
    }
    

    您“通常”在夸大视图:

    LayoutInflater.from(context).inflate(R.layout.row_items, parent, false)
    

    如果你想为此使用 ViewBinding,你需要用它来膨胀它。

    RowItemBinding.inflate(LayoutInflater.from(context), parent, false)
    

    并将该实例传递给 ViewHolder,以便它可以将其视为 ViewBinding

    class ViewHolder(itemView: RowItemBinding) : RecyclerView.ViewHolder(itemView.root)
    

    【讨论】:

    • 太感谢了!
    【解决方案2】:

    您没有在此类中使用视图绑定。

    itemView 只是一个 View,它没有名为 userIdtitle 的字段

    例如,您可以这样做来修复错误。

            init {
                userId = itemView.findViewById<TextView>(R.id.userId)
                title = itemView.findViewById<TextView>(R.id.title)
            }
    

    或者要改用视图绑定,请将 onCreateViewHolder 更改为

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        var itemView = RowItemsBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return ViewHolder(itemView)
    }
    

    并将ViewHolder 更改为

    class ViewHolder(itemView: RowItemsBinding): RecyclerView.ViewHolder(itemView.root) {
        var userId: TextView
        var title: TextView
    
        init {
            userId = itemView.userId
            title = itemView.title
        }
    }
    

    【讨论】:

    • 太感谢了!
    猜你喜欢
    • 2016-01-14
    • 1970-01-01
    • 2020-12-26
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多