Rumah > Java > javaTutorial > Bagaimana untuk Menghitamkan Data Firestore dengan Cekap untuk Android RecyclerView Scrolling?

Bagaimana untuk Menghitamkan Data Firestore dengan Cekap untuk Android RecyclerView Scrolling?

Patricia Arquette
Lepaskan: 2024-12-27 13:00:13
asal
434 orang telah melayarinya

How to Efficiently Paginate Firestore Data for Android RecyclerView Scrolling?

Menemukakan Data Firestore untuk Android RecyclerView dengan Penatalan

Penerangan Masalah

Dokumentasi Firestore menyediakan panduan terhad untuk melaksanakan penomboran dengan RecyclerView untuk senario menatal. Walaupun mengikuti dokumentasi rasmi, pengguna mungkin menghadapi kesukaran.

Penyelesaian: Penomboran dengan OnScrollListener

Untuk menomborkan data daripada Firestore dan memaparkannya dalam RecyclerView secara berperingkat, ikut langkah berikut:

  1. Sediakan RecyclerView: Konfigurasikan reka letak pengurus dan nyatakan RecyclerView dengan penyesuai senarai kosong.
  2. Tentukan pertanyaan Firestore: Gunakan kaedah orderBy() dan limit() untuk mendapatkan semula item dalam tertib menaik dengan had (cth., 15).
  3. Pelaksanaan pertanyaan awal: Lakukan permulaan pertanyaan dan tambah data yang diambil pada penyesuai senarai. Kemas kini lastVisible untuk mewakili dokumen terakhir yang kelihatan.
  4. RecyclerView scroll listener: Tambah RecyclerView.OnScrollListener ke RecyclerView untuk mengesan apabila pengguna menghampiri penghujung senarai.
  5. Logik penomboran: Jika penatalan dikesan dan penghujungnya daripada senarai tidak tercapai, lakukan pertanyaan baharu menggunakan startAfter(lastVisible). Tambahkan data yang diambil pada penyesuai senarai dan kemas kini lastVisible.
  6. Semak untuk item terakhir: Jika pertanyaan baharu mengembalikan kurang daripada had yang ditentukan, tandakan bahawa item terakhir telah dicapai dan lumpuhkan penomboran selanjutnya.

Kod Contoh

// ...

// 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
                            }
                        }
                    }
                }
            }
        })
    }
}

// ...
Salin selepas log masuk

Kesimpulan

Penyelesaian yang disediakan dengan cekap mengendalikan penomboran untuk RecyclerView dalam senario penatalan. Ia memastikan pengambilan data tepat pada masanya semasa pengguna menatal, memberikan pengalaman pemuatan yang lancar.

Atas ialah kandungan terperinci Bagaimana untuk Menghitamkan Data Firestore dengan Cekap untuk Android RecyclerView Scrolling?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan