android - 如何使用 Firestore 使 Gridlayout 可批量滚动?
问题描述
我正在尝试Gridlayout
使用firestore
数据库实现并使其滚动 5 个项目,然后再滚动 5 个项目。
我已经尝试过如何使用 Android 对 Firestore 进行分页? 但不适用于线性布局,但我想要 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 个项目。那么我该如何解决这个问题呢?
解决方案
推荐阅读
- python - Pandas 中的嵌套分组
- python - 查找信用卡验证的奇数和偶数
- database - 如何使用本机反应将数据存储在本地存储中?
- python - 如何将数组和列表放在一起并根据数组的值过滤列表?
- web-crawler - 我正在使用 nutch rest api 在 nutch 中生成分段它正在工作 nutch 版本(1.17)
- javascript - 如何用从关系中获得的数据填充复选框
- python - 在 Pyspark ML 中处理 IllegalArgumentException
- python - 在python中的字典中搜索列表
- c++ - 使用指针传递/返回二维数组的 c++ 程序不打印任何内容
- python - 将一组元组转换为集合