Пагинация без библиотек Recycler view Api

Не получается сделать пагинацию, смотрела уже кучу всего( я получаю информацию по запросу:

@GET("/api/character/{id}")
fun getPersonageDetail(@Path("id") id: Int): Observable<Personage>

код ретрофита обычный. код репозитория:

override fun getPersonageDetails(
    id: Int,
    callback: (result: SuccessDetails<Personage>) -> Unit
) {
    restModule.provideRetrofitAndOkHttp(UrlObject.PERSONAGE_LIST_URL).getPersonageDetail(id)
        .map {
            Personage(
                it.personageId,
                it.personageImage,
                it.personageName,
                it.personageSpecies,
                it.personageStatus,
                it.personageGender,
                it.personagePersonageOrigin,
                it.personageLocation,
                it.personageEpisode
            )
        }
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(
            { personage ->
                callback(SuccessDetails(personage))
            },
            { error -> Log.e("AAA", "${Thread.currentThread().name} Error") }
        )
}

viewModel

class EpisodeDetailsViewModel : ViewModel() {

    private var myId = 0

    private var myRep = RepositoryRetrofitDetails()
    private var resultArray =  ArrayList<Personage> ()
    private var _episodeLiveData = MutableLiveData<Episode>()
    private var _personageLiveData = MutableLiveData<ArrayList<Personage>>()
    val episodeLiveData: LiveData<Episode> = _episodeLiveData
    val personageLiveData: LiveData<ArrayList<Personage>> = _personageLiveData

    fun getPersonage(id: Int) {
        myRep.getEpisodeDetails(id) { episode ->
            val result: Episode = episode.value
            _episodeLiveData.value = result

                for (i in result.episodeCharacters) {
                    myId = (i.substring(i.lastIndexOf("/") + 1)).toInt()
                    myRep.getPersonageDetails(myId) {
                        resultArray.add(it.value)
                        _personageLiveData.value = resultArray
                    }

            }
        }
    }
}

Адаптер:

class PersonageAdapter(
        private val onClick: (Int) -> Unit
    ) : RecyclerView.Adapter<PersonageAdapter.PersonageViewHolder>(){

   //    lateinit var loadMoreListener: OnLoadMoreListener

    var personageList = arrayListOf<Personage>()
        set(value) {
                field = value
            notifyDataSetChanged()
        }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PersonageViewHolder =
        PersonageViewHolder(
                LayoutInflater.from(parent.context).inflate(R.layout.personage_list_item, parent, false)
        )

    override fun onBindViewHolder(holder: PersonageViewHolder, position: Int) {

   //        if ((position >= itemCount - 1 )){
   //            loadMoreListener.onLoadMore()
   //        }



        holder.bind(personageList[position])
        holder.itemView.setOnClickListener {
            onClick(personageList[position].personageId)
        }
    }

    override fun getItemCount(): Int = personageList.size


    interface OnLoadMoreListener {
        fun onLoadMore()
    }

    class PersonageViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        private val personageImage: ImageView =    itemView.findViewById(R.id.personageImage)
        private val personageName: TextView = itemView.findViewById(R.id.personageName)
        private val personageSpecies: TextView =  itemView.findViewById(R.id.personageSpecies)
        private val personageStatus: TextView = itemView.findViewById(R.id.personageStatus)
        private val personageGender: TextView = itemView.findViewById(R.id.personageGender)

        fun bind(personage: Personage) {
            loadingImage(personage.personageImage, personageImage)
            personageName.text = personage.personageName
            personageSpecies.text = personage.personageSpecies
            personageStatus.text = personage.personageStatus
            personageGender.text = personage.personageGender
        }

        private fun loadingImage(string: String, imageView: ImageView){
            Picasso.get().load(string).into(
                    imageView, object : Callback {
                override fun onSuccess() {
                    Log.d("OK", "OK")
                }

                override fun onError(e: Exception?) {
                    Log.d("Error", "Error")
                }
            })
        }
    }
}

фрагмент

class EpisodeDetailFragment : Fragment(R.layout.fragment_episode_details) {

    private val episodeDetailsViewModel by viewModels<EpisodeDetailsViewModel>()
    private lateinit var goEpisodeBack: GoEpisodeBack
    private lateinit var binding: FragmentEpisodeDetailsBinding
    private lateinit var personageAdapter: PersonageAdapter
    private lateinit var itemPersonageSelected: PersonageListFragment.ItemPersonageSelected
    private var myId = 0

    companion object {
        fun newInstance(id: Int) = EpisodeDetailFragment().apply {
            val bundle = Bundle()
            bundle.putInt(EpisodeListFragment.EPISODE_LIST_TAG, id)
            arguments = bundle
        }
    }

    override fun onAttach(context: Context) {
        super.onAttach(context)
        goEpisodeBack = context as GoEpisodeBack

        itemPersonageSelected = context as PersonageListFragment.ItemPersonageSelected
        personageAdapter = PersonageAdapter { i ->
            itemPersonageSelected.onItemPersonageSelected(i)
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (arguments != null) {
            myId = requireArguments().getInt(EpisodeListFragment.EPISODE_LIST_TAG)
            episodeDetailsViewModel.getPersonage(myId)
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = FragmentEpisodeDetailsBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        episodeDetailRecyclerView.adapter = personageAdapter

        episodeDetailsViewModel.episodeLiveData.observe(viewLifecycleOwner) {
            episodeName.text = it.episodeName
            episodeNumber.text = it.episode
            episodeAirFate.text = it.episodeAirFate
        }
        toolbar.setNavigationOnClickListener {
            goEpisodeBack.onGoEpisodeBack()
        }


        episodeDetailsViewModel.personageLiveData.observe(viewLifecycleOwner) 

        {
    
            personageAdapter.personageList = it

        }
    }
    
    interface GoEpisodeBack {
        fun onGoEpisodeBack()
    }
}

Я так понимаю что нужно реализовать ее во VM но не понимаю как, помогите пожалуйста(


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