【发布时间】:2022-01-11 08:17:56
【问题描述】:
我有一个 RecyclerView,当从字符串资源和浮点数数组将数据添加到 myModel 对象时,我的适配器类工作,但在从 firestore 检索这些字符串时不工作。我已经在我的应用程序的其他部分使用 textViews 完成了这项工作。起初我尝试使用toObject<Model>() 填充传递给我的适配器的列表,现在我已经手动从hashMap 中获取数据。我使用了snackbars 来确保数据在传递给我的适配器的列表中。我尝试覆盖 onStart() 和 onstop() 来监听数据库的更改,但 mAdapter 是 oncreate() 中的一个局部变量,并且此回收器视图中的数据实时更新并不重要,当活动启动很多。
这不起作用:
collection.get().addOnSuccessListener { querySnapshot ->
for (i in 0 until querySnapshot.size()){
val data = querySnapshot.documents[i].data
val Model = Model()
val name = data!!["Name"].toString()
val rating = data!!["Rating"].toString().toFloat()
Model.Name= name
Model.Rating = rating
list.add(Model)
这样做:
val myImageNameList = arrayOf(R.string.1, R.string.2, R.string.cafe_3, R.string.4, R.string.5, R.string.6, R.string.7, R.8)
val myImageRatingList = arrayOf(2.4f, 4.1f, 3.6f, 3.4f, 2.8f, 1.9f, 4.1f, 3.9f )
for (i in 0..7){
val model = Model()
model.Name = getString(myImageNameList[i])
model.Rating = myImageRatingList[i]
list.add(model)
}
适配器类摘录:
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Adapter.ViewHolder {
val inflater = LayoutInflater.from(parent.context)
val v = inflater.inflate(R.layout.row_layout, parent, false)
return ViewHolder(v)
}
//bind the data to child views of the ViewHolder
override fun onBindViewHolder(holder: Adapter.ViewHolder, position: Int) {
val info = imageModelArrayList[position]
holder.txtMsg.text = info.Name
holder.ratingbar.rating = info.Rating
holder.ratingDecimal.text = "("+ info.Rating + ")"
}
//get the max size of the recycler view
override fun getItemCount(): Int {
return imageModelArrayList.size
}
inner class ViewHolder(itemView: View):RecyclerView.ViewHolder(itemView), View.OnClickListener{
var txtMsg = itemView.findViewById<View>(R.id.firstLine) as TextView
var ratingbar = itemView.findViewById<View>(R.id.rating) as RatingBar
我很困惑为什么创建模型对象的第二种方法有效但第一种方法不起作用,据我所知,在这两种情况下,我正在创建一个模型对象并为其字段分配一个字符串和浮动,就在第一个示例中绳子和浮子恰好来自火风暴。
编辑
将 myAdapter 实例化为参数 imageModelArrayList 时传递列表
val recyclerView = findViewById<View>(R.id.recycler_view) as RecyclerView
val layoutManager = LinearLayoutManager(this)
recyclerView.layoutManager = layoutManager
val imageModelArrayList = populateList()
val mAdapter = Adapter(imageModelArrayList)
recyclerView.adapter = mAdapter
【问题讨论】:
-
在你的第一个代码sn-p中,你如何使用创建的
list。你也可以在问题中添加该代码吗? -
@ArpitShukla 列表作为参数 ImageModelArrayList 已编辑问题传递给 myAdapter 以澄清
-
list(在 list.add(Model) 中)和imageModelArrayList是否相同? -
@ArpitShukla 是的
-
当您收到来自 firestore 的响应时,即在 addOnSuccessListener 中时,您需要更新您的回收站视图。您的
populateList函数除了您粘贴在第一个 sn-p 中的内容之外还有其他内容吗?
标签: android firebase kotlin google-cloud-firestore android-recyclerview