Помощь в объявлении RecyclerView.Adapter в Kotlin

Pre: впервые объявляю свой viewHolder и недавно использую Kotlin. Может быть, у меня очень простая ошибка, но я ее не вижу. Ты заранее.

Ошибка:

"Неразрешенная ссылка: ViewHolder"

происходит при указании моего ViewHolder в объявлении класса следующим образом:


package gmn.suninja.recyclerviewproject

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Adapter
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder

class Adapter: RecyclerView.Adapter<Adapter.ViewHolder>{ // ERROR here "ViewHolder"
    // Atributes of Adapter: list of users.
    private  var  userList: List<ModelClass>

    // Constructor
    constructor(userList: List<ModelClass> ){
        this.userList = userList
    }

    /* Implement the three methods from interface. */
    /* Inflates view and returns HeaderViewHolder. */
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Adapter.ViewHolder {// ERROR here "ViewHolder"
        val view: View = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_design, parent,false)
        return ViewHolder(view)
    }

    /* To bind the data from the Main Activity or Data class inside the RecyclerView*/
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        var resource:Int = userList.get(position).getImageView()
        var name: String = userList.get(position).getTextViewName()
        var message: String = userList.get(position).getTextViewMessage()
        var time:String = userList.get(position).getTextViewTime()

        // Now, to send this data (above) to the holder
        holder.setData(resource, name, message, time)
    }

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

    /* ViewHolder for displaying list. */
    // #1 #custonRecyclerView -> create ViewHolder
    class ViewHolder(val itemView: View): RecyclerView.ViewHolder(itemView) {
        fun setData(resource: Int, name: String, message: String, time: String) {
            ivImage.setImageResource(resource)
            tvName.setText(name)
            tvMessage.setText(message)
            tvTime.setText(time)

        }
        private var ivImage: ImageView  = itemView.findViewById(R.id.imageView)
        private var tvName: TextView    = itemView.findViewById(R.id.textViewName)
        private var tvMessage: TextView = itemView.findViewById(R.id.textViewMessage)
        private var  tvTime: TextView   = itemView.findViewById(R.id.textViewTime)



    }
}

Я пробовал несколько вещей. Однако ошибка возникает при использовании общедоступного интерфейса Android «<Adapter.ViewHolder>». Итак, я не знаю, как избежать этой ошибки, так как я должен ее реализовать.

Я новичок в этом. Еще раз спасибо.

Я нашел и попробовал, как это сделать на Java, и это работает. Но не в Котлине, так что это, вероятно, очень простой вопрос >_<

1
0
57
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

это противоречит/конфликтует с вашей строкой импорта

import android.widget.Adapter

Либо сделать

import android.widget.Adapter as AndroidAdapter

или переименуйте свой класс во что-то лучше, чем «Адаптер».

Вы в основном объявили свой класс ViewHolder в классе «Адаптер», который имеет то же имя, что и тот, который вы импортируете из Android SDK, поэтому он ищет внутри класса из Android класс ViewHolder, а не в вашем классе с именем Adapter.

Надеюсь, это поможет. :)

Это сделало это. Спасибо (большое!) Это мой первый вопрос. И я с нетерпением жду возможности внести свой вклад и помочь другим так же, как и вы. Тай.

suninja 17.12.2022 15:18

рад, что смог помочь, приятель, может быть, вы тоже одобрите ответ как решение :)

Radu M 17.12.2022 15:19

Ошибка

"Неразрешенная ссылка: ViewHolder"

говорит вам, что вы ссылаетесь ViewHolder и ресурс не виден. Вам нужно import. Вам понадобится import необходимый пакет (читайте это)

Спасибо, как уже упоминал другой товарищ. Указание импорта как «импортировать android.widget.Adapter as AndroidAdapter» сделало это. Спасибо!

suninja 19.12.2022 17:20

удалите этот импорт import android.widget.Adapter и импортируйте адаптер из вашего проекта.

Другие вопросы по теме