我正在使用 FirestorePagingAdapter 从后端使用分页加载数据。
我的 RecyclerView 不仅托管分页请求的结果,还托管根据分页结果显示的数据(想象一个聊天/消息应用程序,其中在每个新的一天,都会将标签添加到用户在滚动时看到的数据集中).
我就是这样完成的
super.getItem()
通过分页适配器获取新项目addLoadStateListener()
问题是,由于适配器正在使用分页 3,我收到一条错误消息,提示我在分页中重复使用密钥。此后,应用程序就会崩溃。
The same value was passed as the nextKey in two sequential Pages loaded from a PagingSource
这是一些代码。如果需要,我可以包含更多内容,但这应该是发生错误的部分
@Override
public void onBindViewHolder(@NonNull RecyclerViewHolder<T, ? extends ViewBinding> holder, int position) {
try {
//Needed to page the list, although we use the item from our own list
super.getItem(getPagingPosition(position));
} catch (Exception ignore) {
//If this fails, because there are less items in the list, do not crash, this is fine
Log.d(TAG, "This is an expected exception");
} finally {
holder.bind(getList().get(position));
}
}
protected int getPagingPosition(int requestedPosition) {
/* TODO: This could be optimized, it is used A LOT (on every viewholder bind) and has linear runtime */
int count = 0;
for (int i = 0; i < requestedPosition; i++) {
if (!getPagedClass().isInstance(getList().get(i))) count++;
}
Log.d(TAG, "getPagingPosition: "+requestedPosition+" maps to "+(requestedPosition-count));
return requestedPosition - count;
}
我找到了答案。它与我的代码无关,而是与 firebaseUI 中的错误有关。版本 8.0.0 仍然可以在 8.0.1 中断分页的情况下工作。已经有一个未解决的问题这里