使用滾動對Android RecyclerView 的Firestore 資料進行分頁
問題描述
Firestore 文件提供了有關使用RecyclerView 實現滾動分頁的有限指導場景。儘管遵循官方文檔,使用者可能會遇到困難。
解決方案:使用OnScrollListener 分頁
要對Firestore 中的資料進行分頁並逐步在RecyclerView 中顯示,請按照以下步驟操作:
- 設定RecyclerView: 配置佈局管理器並實例化具有空列表適配器的RecyclerView。
- 定義 Firestore 查詢: 使用 orderBy() 和 limit() 方法以升序擷取具有限制的項目(例如 15)。
- 初始查詢執行: 執行初始查詢並將檢索到的資料新增至清單 適配器。更新lastVisible以表示最後一個可見文件。
- RecyclerView滾動偵聽器: 向RecyclerView新增RecyclerView.OnScrollListener以偵測使用者何時接近清單末端。
- 分頁邏輯: 如果偵測到捲動且未到達清單末端達到後,使用 startAfter(lastVisible) 執行新查詢。將檢索到的資料新增至清單適配器並更新lastVisible。
- 檢查最後一項: 如果新查詢傳回的資料少於指定的限制,則標記已達到最後一項並停用進一步分頁。
// ... // Define the query limit private val limit = 15 // Initial query val query = productsRef.orderBy("productName", Query.Direction.ASCENDING).limit(limit) query.get().addOnCompleteListener { task -> if (task.isSuccessful) { for (document in task.result!!) { val productModel = document.toObject(ProductModel::class.java) list.add(productModel) } productAdapter.notifyDataSetChanged() lastVisible = task.result!!.documents[task.result!!.size() - 1] // RecyclerView scroll listener recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { super.onScrollStateChanged(recyclerView, newState) if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) { isScrolling = true } } override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) val linearLayoutManager = recyclerView.layoutManager as LinearLayoutManager val firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition() val visibleItemCount = linearLayoutManager.childCount val totalItemCount = linearLayoutManager.itemCount if (isScrolling && (firstVisibleItemPosition + visibleItemCount == totalItemCount) && !isLastItemReached) { isScrolling = false val nextQuery = productsRef.orderBy("productName", Query.Direction.ASCENDING).startAfter(lastVisible).limit(limit) nextQuery.get().addOnCompleteListener { t -> if (t.isSuccessful) { for (d in t.result!!) { val productModel = d.toObject(ProductModel::class.java) list.add(productModel) } productAdapter.notifyDataSetChanged() lastVisible = t.result!!.documents[t.result!!.size() - 1] if (t.result!!.size() <h3></h3>結論<p></p>提供的解決方案有效地處理滾動場景中RecyclerView 的分頁。它確保用戶在滾動時及時檢索數據,提供無縫的加載體驗。
以上是如何為Android RecyclerView滾動高效地分頁Firestore資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

WebStorm Mac版
好用的JavaScript開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。