Ошибка "Only one class may appear in a supertype list" при создании ListAdapter
Хочу для работы адаптера воспользоваться ListAdapter. Создал все требующиеся дополнительно классы (Track, TrackViewHolde и ItemComparator). Основывался на видео и документацию, но всё равно происходит ошибка Only one class may appear in a supertype list
package com.example.playlistmaker.search.ui
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.example.playlistmaker.databinding.TrackViewBinding
import com.example.playlistmaker.search.data.dto.TrackResponse
import com.example.playlistmaker.search.domain.api.SearchHistoryRepository
import com.example.playlistmaker.search.domain.api.TrackOnClicked
import com.example.playlistmaker.search.domain.models.Track
class TrackAdapter(
private val items: TrackResponse?,
private val searchHistory: SearchHistoryRepository,
private val trackOnClicked: TrackOnClicked
) : RecyclerView.Adapter<TrackViewHolder>(), ListAdapter<Track,TrackViewHolder>(ItemComparator()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TrackViewHolder {
val layoutInspector = LayoutInflater.from(parent.context)
return TrackViewHolder(TrackViewBinding.inflate(layoutInspector, parent, false))
}
override fun onBindViewHolder(holder: TrackViewHolder, position: Int) {
holder.bind(items!!.results[position])
holder.itemView.setOnClickListener {
searchHistory.save(items.results[position])
trackOnClicked.getTrackAndStart(items.results[position])
}
}
override fun getItemCount(): Int {
return items!!.resultCount
}
companion object{
fun create(parent: ViewGroup): TrackViewHolder{
return TrackViewHolder(TrackViewBinding.inflate(LayoutInflater.from(parent.context),
parent,
false))
}
}
class ItemComparator:DiffUtil.ItemCallback<Track>(){
override fun areItemsTheSame(oldItem: Track, newItem: Track): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(oldItem: Track, newItem: Track): Boolean {
return oldItem == newItem
}
}
}
Код для холдера:
package com.example.playlistmaker.search.ui
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.example.playlistmaker.R
import com.example.playlistmaker.databinding.TrackViewBinding
import com.example.playlistmaker.search.domain.models.Track
import java.text.SimpleDateFormat
import java.util.Locale
class TrackViewHolder(private val binding: TrackViewBinding): RecyclerView.ViewHolder(binding.root) {
private val radius: Float = 2 * itemView.resources.displayMetrics.density
fun bind(model: Track) = with(binding) {
name.text = model.trackNameItem
artist.text = model.artistNameItem
time.text = SimpleDateFormat("mm:ss", Locale.getDefault()).format(model.trackTimeItem)
Glide.with(itemView).load(model.trackAvatarItem).centerCrop().transform(RoundedCorners(radius.toInt())).placeholder(
R.drawable.empty_av
).into(url)
}
}
Подскажите, пожалуйста, в чём может быть проблема, не нашёл тредов с этой ошибкой.
Ответы (1 шт):
Вы не знаете что такое список супертипов?
Он находится в объявлении класса после :
(двоеточия).
В Java (следовательно и в Kotlin/JVM) класс может наследовать только один класс.
У вас их два - оставьте тот, который хотите наследовать, второй уберите.
class TrackAdapter(
private val items: TrackResponse?,
private val searchHistory: SearchHistoryRepository,
private val trackOnClicked: TrackOnClicked
) : ListAdapter<Track,TrackViewHolder>(ItemComparator()) {
Это ограничение относится только к классам, интерфейсов вы можете реализовать сколько угодно в пределах 65535