【问题标题】:FirebaseRecyclerPagingAdapter showing infinite scroll view while using orderByChildFirebaseRecyclerPagingAdapter 在使用 orderByChild 时显示无限滚动视图
【发布时间】: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


【解决方案1】:

我了解您想要实现的内容,但此适配器目前不支持高级查询,因为它已在文档中提及。 如果您使用查询,适配器的行为将像这样。这是此适配器的问题,将尝试解决。 谢谢!

【讨论】:

  • 谢谢。提到的有关使用 orderByKey()、limitToFirst() 或 limitToLast() 的文档。有没有其他方法不使用这个库?我试过使用((LinearLayoutManager) layoutManager).setReverseLayout(true),因为它使用分页,只是小块被颠倒了。
  • 实时数据库有这样的缺点。如果你使用 Firestore 数据库,你可以做任何你想做的事情。只需迁移到 Firestore 数据库即可。
  • 我已迁移到 Firestore。感谢您的建议。
猜你喜欢
  • 2019-07-02
  • 2012-02-25
  • 2019-01-30
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
相关资源
最近更新 更多