Ошибка "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 шт):

Автор решения: woesss

Вы не знаете что такое список супертипов?
Он находится в объявлении класса после : (двоеточия).
В Java (следовательно и в Kotlin/JVM) класс может наследовать только один класс.
У вас их два - оставьте тот, который хотите наследовать, второй уберите.

class TrackAdapter(
    private val items: TrackResponse?,
    private val searchHistory: SearchHistoryRepository,
    private val trackOnClicked: TrackOnClicked
) : ListAdapter<Track,TrackViewHolder>(ItemComparator()) {

Это ограничение относится только к классам, интерфейсов вы можете реализовать сколько угодно в пределах 65535

→ Ссылка