У меня есть recyclerview в моем приложении, и я хотел заставить его работать с библиотекой Android paging3. Это работает, но не так, как я хотел. Здесь, когда я открываю список, количество данных, которое я определил в PagingConfig.pageSize, создается вверху. И когда я продолжаю прокручивать, он никогда не останавливается, как бесконечный цикл. Но когда я прокручиваю вниз, он работает нормально, вот так;
как вы видите, прокрутка вверх всегда включена.
Я не знаю, в чем проблема, мои коды;
Мой Адаптер;
package com.tolgahantutar.bexworkfloww.ui.addressbook
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.Navigation
import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.tolgahantutar.bexworkfloww.R
import com.tolgahantutar.bexworkfloww.data.models.userget.UserGetValue
import kotlinx.android.synthetic.main.contacts_layout.view.*
class UserAdapter() :
PagingDataAdapter<UserGetValue, UserAdapter.UserViewHolder>(DiffCallBack()) {
class DiffCallBack : DiffUtil.ItemCallback<UserGetValue>(){
override fun areItemsTheSame(oldItem: UserGetValue, newItem: UserGetValue): Boolean {
return oldItem.name == newItem.name
}
override fun areContentsTheSame(oldItem: UserGetValue, newItem: UserGetValue): Boolean {
return oldItem.name == newItem.name
}
}
override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
holder.itemView.contac_name_textview.text =getItem(position)!!.name
holder.itemView.user_profile_text_left_drawable.setText("${(getItem(position)!!.name.substringBefore(" ")).subSequence(0,1)}"+"${(getItem(position)!!.name.substringAfter(" ").subSequence(0,1))}")
holder.itemView.contact_info_text.text = getItem(position)!!.title
var getContactValue = getItem(position)!!
holder.itemView.setOnClickListener {
val action = AdressBookFragmentDirections.actionUserDetail(getItem(position)!!)
Navigation.findNavController(it).navigate(action)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserViewHolder {
return UserViewHolder(
LayoutInflater.from(parent.context)
.inflate(R.layout.contacts_layout, parent, false)
)
}
class UserViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
}
}
источник подкачки;
import androidx.paging.PagingSource
import com.tolgahantutar.bexworkfloww.data.models.userget.UserGetValue
import com.tolgahantutar.bexworkfloww.data.network.apis.WorkFlowServicesApi
class UserRemotePagingSource(private val api : WorkFlowServicesApi): PagingSource<Int,UserGetValue>(){
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, UserGetValue> {
return try {
val page = params.key?: 1
val response = api.userGet(2,page,2)
LoadResult.Page(
data = response.body()!!.userGetValue,
prevKey = page-1,
nextKey = page+1
)
}catch (e: Exception){
LoadResult.Error(e)
}
}
}
ViewModel;
fun usersPagingFlow(): Flow<PagingData<UserGetValue>>{
return Pager(
config = PagingConfig(
pageSize = 2,
prefetchDistance = 2,
enablePlaceholders = true,
initialLoadSize = 2*3
)
){
UserRemotePagingSource(api)
}.flow
}
И Фрагмент;
recycler_view_contacts.setHasFixedSize(true)
recycler_view_contacts.adapter = pagingDataAdapter
recycler_view_contacts.layoutManager = LinearLayoutManager(requireContext())
lifecycleScope.launch {
addressBookViewModel.usersPagingFlow().collectLatest { pagingData ->
pagingDataAdapter.submitData(pagingData)
}
}