Pagination RecyclerView

Всем привет. Изучаю разработку на системе андроид и при пагинации списка получается следующее: при ответе от Retrofit мне приходит объект Movie,хранящий в себе список фильмов. При пагинации через метод addOnScrollListener получается так, что при прокрутке вниз первая страница заменяется второй и далее наверх уже нельзя проскроллить. Такое ощущение, что адаптер пересоздаётся, а не расширяется.

movieListRecycler?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)
                val totalItem: Int = layoutManager.itemCount
                val lastVisibleItem: Int = layoutManager.findLastVisibleItemPosition()
                scope.launch {
                    if (!isLoading && lastVisibleItem == totalItem - 1) {
                        isLoading = true
                        PAGE_NUMB++
                        movieListAdapter = MovieListAdapter(loadMovies(), this@FragmentMoviesList)
                        movieListRecycler?.adapter = movieListAdapter
                        movieListAdapter.notifyDataSetChanged()
                        isLoading = false
                    }

                }
            }
        })

Код адаптера

class MovieListAdapter(
    private var listMovies: Movie,
    private val cellClickListener: CellClickListener?
) : RecyclerView.Adapter<MovieListAdapter.MovieListViewHolder>() {
    val scope = CoroutineScope(Dispatchers.Main)
    

    inner class MovieListViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        private var imageMain: ImageView? = null
        private var titleName: TextView? = null
        private var duration: TextView? = null
        private var numbReviews: TextView? = null
        private var age: ImageView? = null
        var genre: TextView? = null
        private var like: ImageView? = null
        private var stars: RatingBar? = null

        init {
            imageMain = itemView.findViewById(R.id.movie_img)
            titleName = itemView.findViewById(R.id.cinema_title)
            duration = itemView.findViewById(R.id.duration)
            numbReviews = itemView.findViewById(R.id.name)
            age = itemView.findViewById(R.id.ageRate)
            genre = itemView.findViewById(R.id.tag)
            like = itemView.findViewById(R.id.toLike)
            stars = itemView.findViewById(R.id.rating)
        }

        fun bind(movie: Movie) {
            scope.launch {
                val config = RetrofitModule.moviesApi.getConfig(API_KEY)
                val strUrl: String =
                    config.images?.secureBaseUrl + config.images?.posterSizes?.get(4) + movie.results?.get(
                        adapterPosition
                    )?.posterPath
                imageMain!!.load(strUrl)
                titleName?.text = movie.results?.get(adapterPosition)?.title
                val movieInfoRequest = RetrofitModule.moviesApi.getMovieInfo(
                    movie.results?.get(index = adapterPosition)?.id!!,
                    API_KEY
                )
                Log.d("duration", movieInfoRequest.toString())
                duration?.text = movieInfoRequest.runtime.toString().plus(" MIN")
                genre?.text = movieInfoRequest.genres?.map { it!!.name }!!.joinToString()
                stars?.rating = movie.results?.get(adapterPosition)?.voteAverage!! * 0.5F
                numbReviews?.text = movieInfoRequest.voteCount.toString().plus(" REVIEWS")
            }
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MovieListViewHolder {
        return MovieListViewHolder(
            LayoutInflater.from(parent.context).inflate(R.layout.view_holder_movie, parent, false)
        )
    }

    override fun onBindViewHolder(holder: MovieListViewHolder, position: Int) {
        val movieList: Movie = listMovies
        holder.bind(movieList)
        holder.itemView.setOnClickListener {
            cellClickListener?.onCellClickListener(holder.itemView, position)
        }
    }

    override fun getItemCount(): Int {
        return listMovies.results?.size!!
    }

}

interface CellClickListener {
    fun onCellClickListener(view: View, position: Int)
}

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