如何从 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 [重复]

从firebase获取数据时Recyclerview为空白

从 firebase 检索数据并将其显示在可扩展的 recyclerview 中

通过kotlin ..通过firebase从数据库读取数据到RecyclerView的麻烦