ViewHolder 在使用 Kotlin 绑定时无法识别 textview

ViewHolder not recognising textview on binding using Kotlin

提问人:sara fernandes 提问时间:11/5/2023 更新时间:11/5/2023 访问量:50

问:

由于这是我第一次使用 kotlin 编程,我正在在线学习教程,我只是想将从数据库中的表中获得的文本绑定到 ViewModel,我从我在网上看到的示例开始作为基础:

在此代码中,我在“itemView.userName.text = ”test“”上收到错误,它无法识别“userName”,我不知道为什么。

使用此适配器

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.timetally.R
import com.example.timetally.repository.entity.TaskType

class TaskTypeAdapter : RecyclerView.Adapter<TaskTypeAdapter.ViewHolder>() {

    private var taskTypeList = emptyList<TaskType>()

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        fun bind(taskType: TaskType) {
            itemView.userName.text = "test"
        }
    }

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

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bind(taskTypeList[position])
    }

    override fun getItemCount(): Int = taskTypeList.size

    fun setData(userLtaskTypeListist: List<TaskType>) {
        this.taskTypeList = taskTypeList
        notifyDataSetChanged()
    }
}

并使用这个 xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">
    <TextView
        android:id="@+id/userName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp" />
    <TextView
        android:id="@+id/userEmail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:textColor="@android:color/darker_gray" />
    <TextView
        android:id="@+id/userPhone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:textColor="@android:color/darker_gray" />
    <TextView
        android:id="@+id/userWebsite"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:textColor="@android:color/darker_gray" />
</LinearLayout>

我尝试了更简单的布局,只有一个textView,清理并重建项目,但我无法使其工作

Android Kotlin 视图 数据绑定 android-viewholder

评论


答:

2赞 vasberc 11/5/2023 #1

这不是在 android 中使用视图绑定的方法。 首先,在模块的 gradle 中,您必须启用视图绑定功能:

android {
    ...
    buildFeatures {
        viewBinding = true
    }
}

之后,在视图容器中,您可以创建绑定实例并使用它:

class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

    private val binding = TaskTypeLayoutBinding.bind(itemView)

    fun bind(taskType: TaskType) {
        binding.userName.text = "test"
    }
}

启用视图绑定功能时,将自动为所有布局生成绑定类。

评论

1赞 sara fernandes 11/5/2023
非常感谢你,这就是我所缺少的