如何从 Firebase RecyclerView 适配器获取 itemId 或 ItemName
Posted
技术标签:
【中文标题】如何从 Firebase RecyclerView 适配器获取 itemId 或 ItemName【英文标题】:How can i get itemId or ItemName from Firebase RecyclerView adapter 【发布时间】:2021-09-27 19:52:16 【问题描述】:我有一个 RecyclerView 适配器。我需要单击此 RecyclerView 中的一个项目并获取他的 ID 或名称(“Audi”),然后使用 intent.putExtra() 将其传递给新 Activity 我如何获取 id 或名称“Audi”?下面你可以看到我的代码,但它不起作用:(
private var dbRef: DatabaseReference = FirebaseDatabase.getInstance().reference.child("Cars").child("Models")
inner class ViewHolder(val binding: CarsListBinding): RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder
return ViewHolder(CarsListBinding.inflate(LayoutInflater.from(parent.context), parent, false))
override fun onBindViewHolder(holder: ViewHolder, position: Int)
with(holder)
with(carsList[position])
Picasso.with(itemView.context).load(image).into(binding.ivCar)
binding.tvCar.text = this.name
itemView.setOnClickListener
val intent = Intent(itemView.context, DescriptionActivity::class.java)
val carID = dbRef.ref.key.toString()
Log.d("MyTag", carID)
itemView.context.startActivity(intent)
override fun getItemCount(): Int
return carsList.size
【问题讨论】:
【参考方案1】:由于“name”属性持有“audi”的值,这与节点的key几乎相同,那么你应该把这个“name”作为额外的信息放在你的Intent对象中:
val intent = Intent(itemView.context, DescriptionActivity::class.java)
intent.putExtra("name", name)
itemView.context.startActivity(intent)
其中“name”是 Car 对象中的一个属性,因为“image”属性位于以下代码行中:
Picasso.with(itemView.context).load(image).into(binding.ivCar)
剩下要做的就是把第一个字母大写:
audi -> Audi
如果这不是你想要的,那么你也应该像这样存储汽车的 ID:
Firebase-root
|
--- Cars
|
--- Audi
|
--- image: "https://..."
|
--- name: "audi"
|
--- id: "Audi"
然后只需在适配器类中使用以下代码行:
val intent = Intent(itemView.context, DescriptionActivity::class.java)
intent.putExtra("id", id)
itemView.context.startActivity(intent)
【讨论】:
以上是关于如何从 Firebase RecyclerView 适配器获取 itemId 或 ItemName的主要内容,如果未能解决你的问题,请参考以下文章
如何在RecyclerView Scroll上下载更多Firebase对象?
Recyclerview 不会从 firebase 检索数据
无法从firebase实时数据库检索数据到recyclerview [重复]