Невозможно выполнить бесконечную прокрутку в recyclerview с Firebase - PullRequest
0 голосов
/ 14 июля 2020

Здравствуйте, я использую Firebase для хранения и получения данных. В настоящее время я получаю данные из Firebase и отображаю их в RecyclerView. Я просто хочу делать бесконечную прокрутку в recyclerview. Но я не знаю, как это сделать с Firebase. Во всяком случае, я пробовал код, но не работал с onScroll (). Отображаются первые 10 данных, но onScroll () не работает.

Пожалуйста, посмотрите этот код и помогите выяснить, почему метод onScroll () не работает?

funnyJokesQuery = FirebaseDatabase.getInstance().getReference(content).orderByChild("subcategory")
                .limitToFirst(10);
        funnyJokesQuery.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                String contentdisplay = dataSnapshot.child("content").getValue(String.class);
                NewContentModel contentModel = new NewContentModel(contentdisplay);
                contentname.add(0, contentModel);
                arrayAdapter.notifyDataSetChanged();
                arrayAdapter.notifyItemChanged(0);
                progressBar.setVisibility(View.GONE);
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {


            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
                progressBar.setVisibility(View.GONE);

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                progressBar.setVisibility(View.GONE);
            }
        });
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);

                if(newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL)
                {
                    isScrolling = true;
                }
            }

            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                currentitems = manager.getChildCount();
                totalitems = manager.getItemCount();
                scrollOutItems = manager.findFirstVisibleItemPosition();
                lastItemPosition = manager.findLastVisibleItemPosition();
                if (isScrolling && (currentitems + scrollOutItems == totalitems)) {
                    Query funnyJokesQuery = FirebaseDatabase.getInstance().getReference(content)
                            .orderByChild("subcategory")
                            .startAt(lastItemPosition)
                            .limitToFirst(10);
                    progressBar.setVisibility(View.VISIBLE);
                    funnyJokesQuery.addChildEventListener(new ChildEventListener() {
                        @Override
                        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                            String contentdisplay = dataSnapshot.child("content").getValue(String.class);
                            NewContentModel newContentModel = new NewContentModel(contentdisplay);
                            contentname.add(lastItemPosition + 1, newContentModel);
                            arrayAdapter.notifyDataSetChanged();
                            progressBar.setVisibility(View.GONE);

                        }
                        @Override
                        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {


                        }

                        @Override
                        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

                        }

                        @Override
                        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }

                    });
                }

            }
        });

Пожалуйста, скажите мне почему этот код дает желаемый результат.

...