Android 为什么firebase查询只获取一次数据

Android 为什么firebase查询只获取一次数据,android,firebase,kotlin,Android,Firebase,Kotlin,我正在使用firebase制作一个项目,它使用分页检索数据。现在,项目需要使用选项卡过滤数据。因此,我有不同的选项卡,我希望在单击每个选项卡时,recyclerview必须更改其列表数据。我获得了第一个选项卡的数据,但当我单击另一个选项卡时,没有任何更改。调试后,我发现查询侦听器只对第一个选项卡运行一次 以下是我的WorkFragment.kt代码: 这是Database.getInstance().getPosts()的代码: 我想在用户每次单击其他选项卡时从实时数据库中获取过滤列表 priv

我正在使用firebase制作一个项目,它使用分页检索数据。现在,项目需要使用选项卡过滤数据。因此,我有不同的选项卡,我希望在单击每个选项卡时,recyclerview必须更改其列表数据。我获得了第一个选项卡的数据,但当我单击另一个选项卡时,没有任何更改。调试后,我发现查询侦听器只对第一个选项卡运行一次

以下是我的WorkFragment.kt代码:

这是Database.getInstance().getPosts()的代码:

我想在用户每次单击其他选项卡时从实时数据库中获取过滤列表

private fun setupRecyclerView() {
    println("setupRecyclerView()")
    binding.recyclerView.apply {
        val linearLayoutManager = LinearLayoutManager(context!!)
        layoutManager = linearLayoutManager
        Database.getInstance().getPosts(category()) { //fetching the data for a category
            workAdapter.postsList = it.toMutableList()
            isLoading = false
        }
        adapter = workAdapter
    }
}

private fun setupTabs() {
    binding.tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
        override fun onTabSelected(tab: TabLayout.Tab?) {
            println("onTabSelected: tab = ${tab?.text}")
            when (tab?.text) { //Selecting the different tabs for different data.
                ASPIRE() -> category = ASPIRE
                PARVARISH() -> category = PARVARISH
                MISSION_14() -> category = MISSION_14
                AWARENESS_PERIODICALS() -> category = AWARENESS_PERIODICALS
                PROJECT_WELLNESS() -> category = PROJECT_WELLNESS
                EDUSEARCH() -> category = EDUSEARCH
            }
            Database.getInstance().getPosts(category()) {
                workAdapter.postsList.removeAll { true }
                workAdapter.postsList = it.toMutableList()
                isLoading = true
            }
        }

        override fun onTabReselected(tab: TabLayout.Tab?) {}

        override fun onTabUnselected(tab: TabLayout.Tab?) {}
    })
}
fun getPosts(category: String, callback: Database.(List<Post>) -> Unit) {
    println("getPosts: category = $category")
    if (!isMaxData) {
        val query = if (lastNode.isEmpty())
            postsReference
                .orderByKey()
                .limitToFirst(ITEM_LOAD_COUNT)
        else
            postsReference
                .orderByKey()
                .startAt(lastNode)
                .limitToFirst(ITEM_LOAD_COUNT)

        query.addListenerForSingleValueEvent(object : ValueEventListener { // REFERENCE POINT
            override fun onDataChange(dataSnapshot: DataSnapshot) {
                println("CHANGING FOR $category")
                if (dataSnapshot.hasChildren()) {
                    val newPosts = ArrayList<Post>()
                    for (snapshot in dataSnapshot.children) {
                        newPosts.add(snapshot.getValue(Post::class.java)!!)
                    }
                    lastNode = newPosts[newPosts.size - 1].timestamp

                    if (lastNode != lastKey)
                        newPosts.removeAt(newPosts.size - 1)
                    else
                        lastNode = "end"

                    val filteredPosts = newPosts.filter { it.category == category }
                    println(filteredPosts)
                    callback(filteredPosts)
                    isLoading = false
                } else {
                    isLoading = false
                    isMaxData = true
                }
            }

            override fun onCancelled(databaseError: DatabaseError) {
                isLoading = false
            }
        })

    }
I/System.out: setupRecyclerView
I/System.out: getPosts: category = A.S.P.I.R.E
I/System.out: CHANGING FOR A.S.P.I.R.E
I/System.out: //the list elements
I/System.out: onTabSelected: tab = Parvarish
I/System.out: getPosts: category = Parvarish
I/System.out: onTabSelected: tab = Mission 14th Nov
I/System.out: getPosts: category = Mission 14th Nov
I/System.out: onTabSelected: tab = A.S.P.I.R.E
I/System.out: getPosts: category = A.S.P.I.R.E