繁体   English   中英

Intent putExtra 在 RecyclerView (Kotlin) 的 ViewHolder 中

[英]Intent putExtra inside ViewHolder of RecyclerView (Kotlin)

我正在创建一个具有以下onBindViewHolder 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内部它没有),我没有我需要提供的值放额外的 我需要在onBindViewholder内部传递一个项目的属性(如果 startActivity() 在那里工作,这不会是问题)。

要在单击视图持有者时获取项目,请使用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很重要,因为单击“无位置”的项目可能会发生。 在 animation 期间,当项目在被移除时被单击时,可能会发生这种情况。

注意:在更高版本的androidx.recyclerview中,不推荐使用getAdapterPosition()以支持getBindingAdapterPosition() 如果您使用的是最新版本,请使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM