#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