【发布时间】:2019-11-24 17:20:47
【问题描述】:
我想在滚动时从 firebase-database 加载数据。我使用了 FirebaseRecyclerPagingAdapter 形式的 firebase-ui。我的查询是
Query query=FirebaseDatabase.getInstance().getReference()
.child("Users")
.child(user.getUid())
.child("notification")
.orderByChild("reqTime");
但我得到了无限滚动视图。删除 orderByChild 会按预期显示结果。但在这里我想先加载最近的数据。有什么方法可以先使用 FirebaseRecyclerPagingAdapter 加载最近的数据?或者不使用FirebaseRecyclerPagingAdapter 如何使用分页加载最近的数据?这是我的代码
PagedList.Config config = new PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setPrefetchDistance(5)
.setPageSize(10)
.build();
DatabasePagingOptions<BookRequestData> options = new DatabasePagingOptions.Builder<BookRequestData>()
.setLifecycleOwner(this)
.setQuery(query, config, BookRequestData.class)
.build();
mAdapter = new FirebaseRecyclerPagingAdapter<BookRequestData, NotificationViewHolder>(options) {
@NonNull
@Override
public NotificationViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new NotificationViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.notification_item, parent, false));
}
@Override
protected void onBindViewHolder(@NonNull NotificationViewHolder holder, int position, @NonNull final BookRequestData bookRequestData) {
//other stuffs
}
@Override
protected void onLoadingStateChanged(@NonNull LoadingState state) {
switch (state) {
case LOADING_INITIAL:
case LOADING_MORE:
// Do your loading animation
mSwipeRefreshLayout.setRefreshing(true);
break;
case LOADED:
// Stop Animation
mSwipeRefreshLayout.setRefreshing(false);
break;
case FINISHED:
//Reached end of Data set
mSwipeRefreshLayout.setRefreshing(false);
break;
case ERROR:
retry();
break;
}
}
不使用orderByChild 它显示的
使用 orderByChild 它显示
【问题讨论】:
-
会不会经常出现ERROR状态?
-
@RajuyourPepe 使用
orderByChild以任意顺序显示数据并且每次都无限滚动。 -
你是怎么解决的?我也面临同样的问题。
-
我已迁移到 Firestore。你可以回答@Shreyas Patil
标签: android firebase-realtime-database pagination firebaseui