Kotlin安卓工作室holder.itemview问题



我试图根据我在youtube上关注的一个tut制作这个手机笔记应用程序,但他没有这个错误。我看了一遍又一遍,我有一个名为NotesAdapter 的文件

holder.itemView.titleTV.text = notesList[position]!!.title
holder.itemView.descTV.text = notesList[position]!!.description
holder.itemView.idTV.text = notesList[position]!!.id.toString()

标题TV,descTV,&idTV给出一个错误";未解析引用:标题TV";等等。这会阻止应用程序运行。有人能帮忙吗?

package com.example.moradinotepad
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
import io.realm.RealmResults

class NotesAdapter (private val context: Context?, private val notesList: RealmResults<Notes>)
:RecyclerView.Adapter<RecyclerView.ViewHolder>()
{
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder
{
val v = LayoutInflater.from(parent.context).inflate(R.layout.notes_rv_layout,parent,false)
return ViewHolder(v)
}
override fun getItemCount(): Int
{
return notesList.size
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int)
{
holder.itemView.titleTV.text = notesList[position]!!.title
holder.itemView.descTV.text = notesList[position]!!.description
holder.itemView.idTV.text = notesList[position]!!.id.toString()
}
class ViewHolder(v: View?): RecyclerView.ViewHolder(v!!){
val title = itemView.findViewById<TextView>(R.id.titleTV)
val desc = itemView.findViewById<TextView>(R.id.descTV)
val id = itemView.findViewById<TextView>(R.id.idTV)
}
}

编辑:Kotlin Android扩展现已弃用。请参见此处


您要么缺少Android KTX扩展,这需要您将它们添加到app/build.gradle文件的顶部,如下所示:

apply plugin: 'kotlin-android-extensions'

和/或您在这个.kt文件的顶部丢失了合成视图的导入。如果缺少导入,可以将光标放在出现错误的代码上,按Alt+Enter键,然后选择导入相关类或函数的选项。

也就是说,既然有了观点约束,综合观点就有点过时了。视图绑定使创建ViewHolders变得更加容易,因为它为您缓存了所有视图引用。使用视图绑定,ViewHolder类将简单地为:

class ViewHolder (val binding: NotesRvLayoutBinding): RecyclerView.ViewHolder(binding.root)

CCD_ 2变为

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder
{
val binding = NotesRvLayoutBinding.inflate(LayoutInflater.from(parent.context))
return ViewHolder(binding)
}

CCD_ 3变为

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int)
{
holder.binding.titleTV.text = notesList[position].title
holder.binding.descTV.text = notesList[position].description
holder.binding.idTV.text = notesList[position].id.toString()
}

您还没有导入它。将这些行添加到应用程序的build.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

请使用这个。

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int)
{
holder.titleTV.text = notesList[position]!!.title
holder.descTV.text = notesList[position]!!.description
holder.idTV.text = notesList[position]!!.id.toString()
}

而不是这样。

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int)
{
holder.itemView.titleTV.text = notesList[position]!!.title
holder.itemView.descTV.text = notesList[position]!!.description
holder.itemView.idTV.text = notesList[position]!!.id.toString()
}

onBindViewHolder方法中删除itemView

没有扩展函数导入。没有这个扩展,你就不能直接引用id。

如果你想直接引用,那么在你的构建等级中导入android扩展

最新更新