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, и это работает. Но не в Котлине, так что это, вероятно, очень простой вопрос >_<
это противоречит/конфликтует с вашей строкой импорта
import android.widget.Adapter
Либо сделать
import android.widget.Adapter as AndroidAdapter
или переименуйте свой класс во что-то лучше, чем «Адаптер».
Вы в основном объявили свой класс ViewHolder в классе «Адаптер», который имеет то же имя, что и тот, который вы импортируете из Android SDK, поэтому он ищет внутри класса из Android класс ViewHolder, а не в вашем классе с именем Adapter.
Надеюсь, это поможет. :)
рад, что смог помочь, приятель, может быть, вы тоже одобрите ответ как решение :)
Ошибка
"Неразрешенная ссылка: ViewHolder"
говорит вам, что вы ссылаетесь ViewHolder
и ресурс не виден. Вам нужно import
. Вам понадобится import
необходимый пакет (читайте это)
Спасибо, как уже упоминал другой товарищ. Указание импорта как «импортировать android.widget.Adapter as AndroidAdapter» сделало это. Спасибо!
удалите этот импорт import android.widget.Adapter
и импортируйте адаптер из вашего проекта.
Это сделало это. Спасибо (большое!) Это мой первый вопрос. И я с нетерпением жду возможности внести свой вклад и помочь другим так же, как и вы. Тай.