Как сделать Gridlayout прокручиваемым в пакетах с пожарным магазином? - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь реализовать Gridlayout с firestore базой данных и заставить ее прокручиваться 5 предметов, а затем еще 5 предметов.

Я пробовал этот код из Как разбить Firestore на Android? , но не работает это для линейного размещения, но я хочу gridlayout:

 private DocumentSnapshot lastVisible;
 private boolean isScrolling;
 private boolean isLastItemReached;
 private int limit = 6;

 //________RV________
 MainCategoriesRV = view.findViewById(R.id.MainCategoriesRV);
 MainCategoriesRV.setHasFixedSize(true);
 gLayoutManager=new GridLayoutManager(MainCategoriesRV.getContext(),2);

 MainCategoriesRV.setLayoutManager(gLayoutManager);

 //______PROGRESS BAR__________
 MainActivityProgress = view.findViewById(R.id.MainActivityProgress);


 final CollectionReference ref = firebaseFirestore
     .collection("MainCategories");

 Query firstQuery = ref
     .orderBy("Category_Name", Query.Direction.ASCENDING).limit(5);

 firstQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
      @Override
      public void onComplete(@NonNull Task<QuerySnapshot> task) {
      if ( task.isSuccessful() ) {
           final List<mainCategroies> list = new ArrayList<>();
           for (DocumentSnapshot document : task.getResult()) {
           mainCategroies maincategroies = document.toObject(mainCategroies.class);
           // assert maincategroies != null;
           // maincategroies.setId(document.getId());

           list.add(maincategroies);
           }
           final CategoriesAdapter categoriesAdapter = new CategoriesAdapter(list);
           MainCategoriesRV.setAdapter(categoriesAdapter);

           lastVisible = task.getResult().getDocuments().get(task.getResult().size() -1);

           RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
           @Override
           public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if ( newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL ) {
                isScrolling = true;
                }
           }

           @Override
           public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                int firstVisibleItemPosition = gLayoutManager.findFirstVisibleItemPosition();
                int visibleItemCount = gLayoutManager.getChildCount();
                int totalItemCount = gLayoutManager.getItemCount();
                if ( isScrolling && (firstVisibleItemPosition+visibleItemCount== totalItemCount) && !isLastItemReached ) {
                isScrolling = false;
                Query nextQuery = ref.orderBy("Category_Name", Query.Direction.ASCENDING)
                    .startAfter(lastVisible)
                    .limit(limit);
                nextQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                     for (DocumentSnapshot d : task.getResult()) {
                     mainCategroies maincategroies = d.toObject(mainCategroies.class);
                     list.add(maincategroies);
                     }
                     categoriesAdapter.notifyDataSetChanged();
                     for (int i = 0; i < task.getResult().size(); i++) {
                     lastVisible = task.getResult().getDocuments().get(task.getResult().size() - 1);
                     }

                     Toast.makeText(getContext(), "please wait,... ", Toast.LENGTH_SHORT).show();
                     if ( task.getResult().size() < limit ) {
                     isLastItemReached = true;

                     }
                }
                });

                }

           }
           };

           MainCategoriesRV.addOnScrollListener(onScrollListener);

      }
      }
 });

а это мои xml файлы

  <RelativeLayout>
  <android.support.v7.widget.RecyclerView
    android:id="@+id/MainCategoriesRV"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_centerVertical="true">

</android.support.v7.widget.RecyclerView>

 </RelativeLayout>

Но это не сработало. Я много искал, но очевидного ответа не было.

Проблема в том, что при попытке прокрутки загружаются только первые 5 элементов, а следующие 5 нет. Так как я могу решить эту проблему?

...