> Java > java지도 시간 > Android RecyclerView 스크롤링을 위해 Firestore 데이터를 효율적으로 페이지 매김하는 방법은 무엇입니까?

Android RecyclerView 스크롤링을 위해 Firestore 데이터를 효율적으로 페이지 매김하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-27 13:00:13
원래의
435명이 탐색했습니다.

How to Efficiently Paginate Firestore Data for Android RecyclerView Scrolling?

스크롤링을 사용하여 Android RecyclerView용 Firestore 데이터 페이지 매기기

문제 설명

Firestore 문서에서는 스크롤 시나리오에서 RecyclerView를 사용하여 페이지 매기기 구현에 대한 제한적인 지침을 제공합니다. 공식 문서를 따랐음에도 불구하고 사용자는 어려움을 겪을 수 있습니다.

해결책: OnScrollListener를 사용한 페이지 매김

Firestore의 데이터 페이지를 매기고 점진적으로 RecyclerView에 표시하려면 다음 단계를 따르세요.

  1. RecyclerView 설정: 레이아웃 관리자를 구성하고 빈 목록 어댑터로 RecyclerView를 인스턴스화합니다.
  2. Firestore 쿼리 정의: orderBy() 및limit() 메서드를 사용하여 제한(예: 15)을 사용하여 오름차순으로 항목을 검색합니다. .
  3. 초기 쿼리 실행: 초기 쿼리를 수행하고 검색된 데이터를 추가합니다. 목록 어댑터에. 마지막으로 표시되는 문서를 나타내도록 lastVisible을 업데이트합니다.
  4. RecyclerView 스크롤 리스너: RecyclerView에 RecyclerView.OnScrollListener를 추가하여 사용자가 목록 끝에 접근하는 시기를 감지합니다.
  5. 페이지 매기기 논리: 스크롤이 감지되고 목록의 끝이 아닌 경우 도달하면 startAfter(lastVisible)를 사용하여 새 쿼리를 수행합니다. 검색된 데이터를 목록 어댑터에 추가하고 lastVisible을 업데이트합니다.
  6. 마지막 항목 확인: 새 쿼리가 지정된 제한보다 적은 수를 반환하는 경우 마지막 항목에 도달했음을 표시하고 비활성화합니다. 추가 페이지 매김.

코드 예시

// ...

// 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() < limit) {
                                isLastItemReached = true
                            }
                        }
                    }
                }
            }
        })
    }
}

// ...
로그인 후 복사

결론

제공된 솔루션은 스크롤 시나리오에서 RecyclerView의 페이지 매김을 효율적으로 처리합니다. 사용자가 스크롤할 때 적시에 데이터를 검색하여 원활한 로딩 경험을 제공합니다.

위 내용은 Android RecyclerView 스크롤링을 위해 Firestore 데이터를 효율적으로 페이지 매김하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿