【问题标题】:Intent putExtra inside ViewHolder of RecyclerView (Kotlin)Intent putExtra 在 RecyclerView (Kotlin) 的 ViewHolder 中
【发布时间】:2021-01-01 19:35:06
【问题描述】:

我正在创建一个具有以下 onBind 和 ViewHolder inerrclass 的 RecyclerViewAdapter:

class PreviewMuseoRecyclerViewAdapter(private val context: Context) : RecyclerView.Adapter<PreviewMuseoRecyclerViewAdapter.ViewHolder>() {

  override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val item = museus[position]
    holder.nom.text = item.nom
    holder.direccio.text = item.direccio}

inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    val nom: TextView = view.findViewById(R.id.museu_nom)
    val direccio: TextView = view.findViewById(R.id.museu_direccio)
        view.setOnClickListener{
            Log.i("hola","Funciona2")
            context?.startActivity(Intent(context, Mood::class.java))
        }
    }
}

我能够使用提供的上下文(在 ViewHolder 内)启动新活动,但因为这是我可以使 onClickListener 工作的唯一地方(在 onBind 内它没有),我没有我需要提供给 putExtra 的价值。 我需要在 onBindViewholder 内部传递一个项目的属性(如果 startActivity() 在那里工作,这不会有问题)。

【问题讨论】:

    标签: android kotlin android-intent


    【解决方案1】:

    要在单击视图持有者时获取项目,请使用getAdapterPosition() 方法:

    view.setOnClickListener {
        val adapterPosition = adapterPosition
        if (adapterPosition == RecyclerView.NO_POSITION) {
            return@setOnClickListener
        }
    
        Log.i("hola","Funciona2")
        val item = museus[adapterPosition];
        // Pass item to intent and start activity
    }
    

    检查RecyclerView.NO_POSITION 很重要,因为可能会发生单击“无位置”的项目。在动画期间,当一个项目在被移除时被点击时,就会发生这种情况。

    注意:在 androidx.recyclerview 的更高版本中,getAdapterPosition() 已被弃用,取而代之的是 getBindingAdapterPosition()。如果您使用的是最新版本,请使用它。

    【讨论】:

      猜你喜欢
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多