在 recyclerview kotlin 中插入 firebase 快照
inserting firebase snapshot in recyclerview kotlin
我有一个简单的回收器视图,它从数据库中读取列表,当我将它们记录到控制台时我可以看到数据,但它没有显示在回收器视图中
下面的函数在 kotlin 片段 class 中,用于包含回收器视图的 xml 布局
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_chat_list, container, false)
view.recyclerView?.setHasFixedSize(true)
view.recyclerView?.layoutManager = LinearLayoutManager(context)
ref?.addChildEventListener(object : ChildEventListener {
override fun onChildAdded(snapshot: DataSnapshot, previousChildName: String?) {
val bal = snapshot.getValue<UserInfo.Uids>()
if (bal != null) {
UserInfo.Uids(bal.email,bal.uid,bal.displayName)
}
Log.d("RecyclerView", UserInfo.Uids().toString())
Log.d("RecyclerView", bal.toString())
adapter = BalAdapter(requireContext(), ArrayList<UserInfo.Uids>(), R.layout.users)
adapter!!.notifyDataSetChanged()
}
override fun onChildChanged(snapshot: DataSnapshot, previousChildName: String?) {
TODO("Not yet implemented")
}
override fun onChildRemoved(snapshot: DataSnapshot) {
TODO("Not yet implemented")
}
override fun onChildMoved(snapshot: DataSnapshot, previousChildName: String?) {
TODO("Not yet implemented")
}
override fun onCancelled(p0: DatabaseError) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
})
return view
}
R.layout.fragment_chat_list
是 xml 包含回收站视图标签
R.layout.users
就是数据xml
view.recyclerView
是recycler查看标签
BalAdapter
是适配器class,可以根据要求提供,但我觉得那里的代码是正确的
UserInfo.Uids
是数据class,包含name
和email
adapter
变量在 override fun onCreateView
之前声明
您似乎没有在回收站视图中填充任何数据。适配器总是用空 ArrayList
:
初始化
/* This is an empty ArrayList */
adapter = BalAdapter(requireContext(), ArrayList<UserInfo.Uids>(), R.layout.users)
您需要将从 firebase 读取的值添加到数组列表中,然后将该数组列表传递到适配器中
例如:
//Before any firebase requests:
val balList = ArrayList<UserInfo.Uids>()
adapter = BalAdapter(requireContext(), balList, R.layout.users)
...
//After you get data from firebase
val bal = snapshot.getValue<UserInfo.Uids>()
balList.add(bal)
adapter.notifyDataSetChanged()
我有一个简单的回收器视图,它从数据库中读取列表,当我将它们记录到控制台时我可以看到数据,但它没有显示在回收器视图中
下面的函数在 kotlin 片段 class 中,用于包含回收器视图的 xml 布局
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_chat_list, container, false)
view.recyclerView?.setHasFixedSize(true)
view.recyclerView?.layoutManager = LinearLayoutManager(context)
ref?.addChildEventListener(object : ChildEventListener {
override fun onChildAdded(snapshot: DataSnapshot, previousChildName: String?) {
val bal = snapshot.getValue<UserInfo.Uids>()
if (bal != null) {
UserInfo.Uids(bal.email,bal.uid,bal.displayName)
}
Log.d("RecyclerView", UserInfo.Uids().toString())
Log.d("RecyclerView", bal.toString())
adapter = BalAdapter(requireContext(), ArrayList<UserInfo.Uids>(), R.layout.users)
adapter!!.notifyDataSetChanged()
}
override fun onChildChanged(snapshot: DataSnapshot, previousChildName: String?) {
TODO("Not yet implemented")
}
override fun onChildRemoved(snapshot: DataSnapshot) {
TODO("Not yet implemented")
}
override fun onChildMoved(snapshot: DataSnapshot, previousChildName: String?) {
TODO("Not yet implemented")
}
override fun onCancelled(p0: DatabaseError) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
})
return view
}
R.layout.fragment_chat_list
是 xml 包含回收站视图标签R.layout.users
就是数据xmlview.recyclerView
是recycler查看标签BalAdapter
是适配器class,可以根据要求提供,但我觉得那里的代码是正确的UserInfo.Uids
是数据class,包含name
和email
之前声明adapter
变量在override fun onCreateView
您似乎没有在回收站视图中填充任何数据。适配器总是用空 ArrayList
:
/* This is an empty ArrayList */
adapter = BalAdapter(requireContext(), ArrayList<UserInfo.Uids>(), R.layout.users)
您需要将从 firebase 读取的值添加到数组列表中,然后将该数组列表传递到适配器中
例如:
//Before any firebase requests:
val balList = ArrayList<UserInfo.Uids>()
adapter = BalAdapter(requireContext(), balList, R.layout.users)
...
//After you get data from firebase
val bal = snapshot.getValue<UserInfo.Uids>()
balList.add(bal)
adapter.notifyDataSetChanged()