Firebase Recycler адаптер подкачки дублирует последний элемент

#android #kotlin #firebase-realtime-database #firebaseui

#Android #kotlin #firebase-база данных в реальном времени #firebaseui

Вопрос:

я пытаюсь реализовать бесконечный firebase recycler, он работает нормально, когда есть несколько элементов, но если у меня мало элементов в списке, он начнет дублировать случайный элемент, чтобы сделать его бесконечным, вот конфигурация для адаптера

 val config: PagedList.Config = PagedList.Config.Builder()
        .setEnablePlaceholders(false)
        .setPrefetchDistance(1)
        .setPageSize(15)
        .build()
 

и вот изображение текущего результата, обратите внимание, что 2-й элемент дублируется, а 3-й — нет, при этом 4-й элемент вообще не может быть найден

введите описание изображения здесь

и это текущие элементы в базе данных firebase

введите описание изображения здесь

вот запрос для данных

 dataBase.child(USERS).child(userId!!).child(TRANSACTIONS).orderByChild("dateInMillis")
 

и это класс адаптера

 class DashboardAdapter(
options: DatabasePagingOptions<Transaction>,
val itemCallback: (transaction: Transaction) -> Unit
) :
FirebaseRecyclerPagingAdapter<Transaction, DashboardAdapter.DashboardViewHolder>(options) {

private val TAG = DashboardAdapter::class.simpleName

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DashboardViewHolder {
    val layoutInflater = LayoutInflater.from(parent.context)
    val binding =
        TransactionItemBinding.inflate(layoutInflater, parent, false)
    return DashboardViewHolder(binding)
}

override fun onBindViewHolder(
    viewHolder: DashboardViewHolder,
    position: Int,
    model: Transaction
) {
    viewHolder.binding.transaction = model
    viewHolder.itemView.setOnClickListener {
        itemCallback(model)
    }
}

class DashboardViewHolder(val binding: TransactionItemBinding) :
    RecyclerView.ViewHolder(binding.root)

override fun onLoadingStateChanged(state: LoadingState) {
    when (state) {
        LoadingState.LOADING_INITIAL -> Log.d(TAG, "onLoadingStateChanged: test")
        LoadingState.LOADING_MORE -> Log.d(TAG, "onLoadingStateChanged: test")
        LoadingState.LOADED -> Log.d(TAG, "onLoadingStateChanged: test")
        LoadingState.FINISHED -> Log.d(TAG, "onLoadingStateChanged: test")
        LoadingState.ERROR -> Log.d(TAG, "onLoadingStateChanged: test")
    }
}
 

}

Комментарии:

1. show также должен размещать код адаптера и запрос

2. добавил их, не вижу необходимости в классе адаптера, хотя

3. я заметил, что эта проблема возникает, когда я использую только orderByChild