我正在寻找一种填充我的RecyclerView的方法。我知道如何从数据库的单个节点填充RecyclerView,但我想知道如何从多个节点获取数据。在我的应用程序中,用户可以选择多个爱好。我希望根据用户选择的爱好填充回收者视图。
下面是数据库x1c 0d1x中用户节点的图片
正如你可以看到我的用户选择了爱好咖啡馆,露营,徒步旅行
我有一个名为“位置”的节点,它有六个子节点:咖啡馆、露营、徒步旅行、博物馆、夜生活和餐馆。
我从这个代码块中获取用户的爱好
val currentuid = FirebaseAuth.getInstance().currentUser!!.uid
val getCurrentUserHobbies =
FirebaseDatabase.getInstance().getReference("users/$currentuid/hobbies")
getCurrentUserHobbies.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
val value = snapshot.getValue(String::class.java)
val valueAsString = value.toString()
if (valueAsString.contains("Hiking")){
}
}
override fun onCancelled(error: DatabaseError) {
}
})
如果我想让我的回收者视图显示所有徒步旅行地点,我可以这样做:
val adapter = GroupAdapter<GroupieViewHolder>()
val hikingRef = FirebaseDatabase.getInstance().getReference("Locations/Hiking")
hikingRef.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
for (snap in snapshot.children) {
val recommendItems = snap.getValue(RecommendationsClass::class.java)
if (recommendItems != null) {
adapter.add(RecommendationsAdapter(recommendItems))
}
}
recommendationsRecyclerView.adapter = adapter
}
override fun onCancelled(error: DatabaseError) {
}
})
现在,如果用户选择了徒步旅行和露营为例。我希望我的回收视图显示从节点位置/徒步旅行和位置/露营的所有位置。我尝试了多个,但没有工作。我不打算写在这里,因为它会占用太多的空间。我试图保持我的问题尽可能简单。
先谢了!
1条答案
按热度按时间tf7tbtn21#
很遗憾,我找不到任何可行的解决方案。我不得不做一些不同的事情。我所做的是从我的位置节点复制子节点,并根据我当前用户的爱好将它们放在users/currentuid/Recommendations中。
下面是执行此操作的代码片段:
上面的代码做了什么,它检查caffe的camping和hiking是否存在于我的users/currentuid/hobbits节点中,如果存在,它从Locations复制数据并将其放在users/currentuid/Recommendations中。
注意:我还必须检查剩下的三个爱好。我只把其中三个用于测试目的。
这里还有一张图片展示了我的做法
在此之后,我只循环了我的Recommendations节点,并使用以下代码片段将所有位置添加到我的Recycler视图中: