Метод submitList не обновляет список для ListAdapter

Я использую ListAdapter для своего RecyclerView. В активити Адаптер инициализируется с пустым списком, а затем я с помощью submitList() хочу загрузить в него новый, полученный из запроса, но всё равно отображается тот список, что я положил при инициализации. Подскажите пожалуйста, что то забыл сделать, чтобы submitList() работал корректно.

Адаптор:

viewModel.getSearchRep().observe(this){
            rep -> trackAdapter = TrackAdapter(listOf(), rep, trackOnClicked)
        }
viewModel.getStatesSearch().observe(this){
        searchStates = it.responseStates
        trackAdapter.submitList(it.response?.results)
        ...
}

Строка настройки и создания ListAdapter:

package com.example.playlistmaker.search.ui

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.ListAdapter
import com.example.playlistmaker.databinding.TrackViewBinding
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: List<Track>?,
    private val searchHistory: SearchHistoryRepository,
    private val trackOnClicked: TrackOnClicked
) : 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!![position])
        holder.itemView.setOnClickListener {
            searchHistory.save(items[position])
            trackOnClicked.getTrackAndStart(items[position])
        }
    }

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

Ответы (2 шт):

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

Нагуглил ответ на основном SO. Если передавать тот же List в ListAdapter#submitList(), то ListAdapter проигнорирует его:

public void submitList(final List<T> newList) {
    if (newList == mList) {
        // nothing to do
        return;
    }
}

Попробуйте каждый раз передавать в ListAdapter#submitList() вновь созданный List, либо вызывайте RecyclerView.Adapter#notifyDataSetChanged() после обновления данных в List.

→ Ссылка
Автор решения: woesss

Вы неправильно используете ListAdapter - он уже содержит в себе список и внутри адаптера вы должны работать с этим списком, а не с собственным:

class TrackAdapter(
    /*private val items: List<Track>?,*/ // список здесь не нужен - он уже есть в ListAdapter
    private val searchHistory: SearchHistoryRepository,
    private val trackOnClicked: TrackOnClicked
) : 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) {
        // объект берём из ListAdapter его методом getItem()
        val item = getItem(position)
        holder.bind(item)
        holder.itemView.setOnClickListener {
            searchHistory.save(item)
            trackOnClicked.getTrackAndStart(item)
        }
    }
    
    /*
    // этот метод переопределять не нужно - он реализован в ListAdapter
    override fun getItemCount(): Int {
        return items!!.size
    }*/
}

Данные в адаптер (в том числе начальные) следует передавать исключительно методом submitList() и никак иначе.

→ Ссылка