ListAdapter android не работает submitList()

Есть список фильмов, который расположен в RecyclerView. Пытаюсь перейти на ListAdapter чтобы обновлять с использованием submitList(), однако ничего не выводится при использовании этого метода, в то время как при обновлении обычным способом через adapter.bind все работает.

    class MovieListAdapter(private val clickListener: MoviesClicks?) :
    ListAdapter<Movie, MovieViewHolder>(MovieDiffCallback()) {
    private var movies: List<Movie> = listOf()
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MovieViewHolder {

        val itemBinding =
            ItemMovieCardBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return MovieViewHolder(itemBinding)
    }

    override fun onBindViewHolder(holder: MovieViewHolder, position: Int) {
        holder.onBind(movies[position])
        holder.itemView.setOnClickListener {
            clickListener?.movieClick(movies[position])
        }
    }

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

    fun bindCards(cards: List<Movie>) {
        movies = cards
    }
}

    class MovieViewHolder(private val itemBinding: ItemMovieCardBinding) :
    RecyclerView.ViewHolder(itemBinding.root) {
    companion object {
        private val imageOption = RequestOptions()
            .placeholder(R.drawable.bg)
            .fallback(R.drawable.bg)
    }

    fun onBind(movie: Movie) {
        itemBinding.tvFilmName.text = movie.title
        Log.i(TAG, "image: ${movie.imageUrl}");
        Log.i(TAG, "text: ${movie.title}");
        Log.i(TAG, "Thread: ${Thread.currentThread().name}");
        Glide.with(context)
            .load(movie.imageUrl)
            .apply(imageOption)
            .into(itemBinding.ivMovieCard)
        bindStars(movie.rating, itemBinding)
        itemBinding.tvGenre.text = movie.genres.joinToString { genre -> genre.name }
        itemBinding.tvCardCountReviews.text =
            context.getString(R.string.reviews, movie.reviewCount.toString())
    }

    private fun <B> bindStars(movieRating: Int, binding: B) {
        val rating = movieRating / 2.0
        if (binding is ItemMovieCardBinding) {
            if (rating < 4.5) {
                binding.ivCardStar5.setColorFilter(
                    ContextCompat.getColor(
                        context,
                        R.color.textColor
                    )
                )
            }
            if (rating < 3.5) {
                binding.ivCardStar4.setColorFilter(
                    ContextCompat.getColor(
                        context,
                        R.color.textColor
                    )
                )
            }
            if (rating < 2.5) {
                binding.ivCardStar3.setColorFilter(
                    ContextCompat.getColor(
                        context,
                        R.color.textColor
                    )
                )
            }
            if (rating < 1.5) {
                binding.ivCardStar2.setColorFilter(
                    ContextCompat.getColor(
                        context,
                        R.color.textColor
                    )
                )
            }
            if (rating < 0.5) {
                binding.ivCardStar1.setColorFilter(
                    ContextCompat.getColor(
                        context,
                        R.color.textColor
                    )
                )
            }
        }

    }
    private class MovieDiffCallback : DiffUtil.ItemCallback<Movie>() {
    override fun areItemsTheSame(oldItem: Movie, newItem: Movie): Boolean =
        (oldItem.id == newItem.id)

    override fun areContentsTheSame(oldItem: Movie, newItem: Movie): Boolean = (oldItem == newItem)
}

    class MoviesListFragment : Fragment() {

    private val viewModel: MovieListViewModel by viewModels {
        MovieListViewModelFactory(requireContext())
    }

    private var columnCount = 2
    private var listener: MoviesClicks? = null
    private lateinit var adapter: MovieListAdapter
    private lateinit var coroutineScope: CoroutineScope

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {
            columnCount = it.getInt(ARG_COLUMN_COUNT)
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        val view = inflater.inflate(R.layout.fragment_movies_list, container, false)
        val recycler = view.findViewById<RecyclerView>(R.id.rv_movie_cards)
        coroutineScope = CoroutineScope(context = Dispatchers.IO)
        adapter = MovieListAdapter(listener)
        recycler.layoutManager = GridLayoutManager(context, 2)
        recycler.adapter = adapter

        viewModel.moviesList.observe(this.viewLifecycleOwner, this::updateAdapter)
        viewModel.loadMovies()
        return view
    }

 /*   override fun onStart() {
        super.onStart()
//        updateData()
    }

    private fun updateData() {
        coroutineScope.launch {
            adapter.bindCards((JsonMovieRepository(requireContext())).loadMovies())
            launch(Dispatchers.Main) { adapter.notifyDataSetChanged() }
        }
    }*/

    private fun updateAdapter(movies: List<Movie>) {
        adapter.bindCards(movies)
        coroutineScope.launch(Dispatchers.Main) { adapter.notifyDataSetChanged() }
    }


    companion object {

        const val ARG_COLUMN_COUNT = "column-count"

        @JvmStatic
        fun newInstance(columnCount: Int) =
            MoviesListFragment().apply {
                arguments = Bundle().apply {
                    putInt(ARG_COLUMN_COUNT, columnCount)
                }
            }
    }

    fun setClickListener(l: MoviesClicks?) {
        listener = l
    }

}

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