FirebaseRecyclerPagingAdapter在使用orderByChild时显示无限滚动视图

时间:2019-07-16 02:33:52

标签: android firebase-realtime-database pagination firebaseui

我想在滚动时从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,它显示的是 without orderBychild

使用orderByChild表示 using orderBychild

1 个答案:

答案 0 :(得分:0)

我了解您要实现的内容,但是该适配器目前不支持高级查询,因为文档中已经提到了该高级查询。 如果使用查询,则适配器的行为将如下所示。这是此适配器的问题,将尝试找出它。 谢谢!