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