【发布时间】:2020-04-20 17:27:32
【问题描述】:
我在recyclerview 中有一个点击监听器,我希望在此基础上更新列表。就像如果我点击一个按钮,列表应该用内容更新,当用户再次点击按钮时,我希望列表中的数据为空,然后用所需的数据填充它。我能够在没有Firebase 的childeventlistener 功能的情况下实现上述目标,但是通过启用ChildEventListener,我发现很难实现这个概念。
代码如下。
片段如下
The ViewModel which assigns data to the adapter
viewModel.productdetail.observe(viewLifecycleOwner, Observer {
adapter.adddetails(it)
})
// The onClickListener which on clicked gets data from Firebase
override fun recyclerViewItemClickedHorizontal(view: View, text: String) {
when (view.id) {
R.id.card_hor -> {
viewModel.productsdetails(text)
viewModel.fetchtotal(text)
}
}
}
视图模型
fun productsdetails(productname: String) {
// I had tried to set the additems.clear here but it didn't work
dbadd.child(productname).addChildEventListener(productchildlistener)
}
private val productchildlistener = object : ChildEventListener {
override fun onCancelled(error: DatabaseError) {}
override fun onChildMoved(snapshot: DataSnapshot, p1: String?) {}
override fun onChildChanged(snapshot: DataSnapshot, p1: String?) {
val products = snapshot.getValue(AddModel::class.java)
products?.id = snapshot.key
_productdetail.value = products
}
override fun onChildAdded(snapshot: DataSnapshot, p1: String?) {
val products = snapshot.getValue(AddModel::class.java)
products?.id = snapshot.key
_productdetail.value = products
}
override fun onChildRemoved(snapshot: DataSnapshot) {
}
}
}
适配器
private var additems = mutableListOf<AddModel>()
// This functions assigns the data to the list
fun adddetails(addmodel:AddModel) {
additems.add(addmodel)
notifyDataSetChanged()
}
这就是我尝试在没有 CHILDEVENTLISTENER 的情况下实现它的方式
fun productsdetails(productname: String) {
dbadd.child(productname).addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(error: DatabaseError) {}
override fun onDataChange(snapshot: DataSnapshot) {
if (snapshot.exists()) {
val additems = mutableListOf<AddModel>()
additems.clear()
for (products in snapshot.children) {
val product = products.getValue(AddModel::class.java)
product?.id = products.key
product?.let { additems.add(it) }
}
_productdetail.value = additems
}
}
})
}
在执行上述操作时,我必须将 LiveData 分配为 > 然后将列表提供给适配器以完成需要。 谢谢你的帮助
【问题讨论】:
标签: android firebase kotlin firebase-realtime-database android-recyclerview