![](/img/trans.png)
[英]RecyclerView itemClickListener in Kotlin android
[英]Itemclicklistener on recyclerview item in kotlin
如何通过单击 recyclerview 项目从一项活动移动到另一项活动,并在意图中传递所单击项目的一些详细信息?
这就是我的适配器 class 的样子
var onItemClick : ((Contest)->Unit)?=null
private lateinit var mListener: onItemClickListener
interface onItemClickListener{
fun onItemClick(position: Int)
}
fun setOnItemClickListener(listener: onItemClickListener){
mListener = listener
}
inner class MyViewHolder(itemView:View,listener: onItemClickListener):RecyclerView.ViewHolder(itemView ){
val name: TextView = itemView.findViewById(R.id.card_title)
val time: TextView = itemView.findViewById(R.id.card_time)
val venue: TextView = itemView.findViewById(R.id.card_venue)
val team: TextView = itemView.findViewById(R.id.card_team_type)
val prize: TextView = itemView.findViewById(R.id.card_prize)
val entry: TextView = itemView.findViewById(R.id.card_entry_division)
val join_btn: Button = itemView.findViewById(R.id.card_join_btn)
init {
itemView.setOnClickListener{
onItemClick?.invoke(contestlist[adapterPosition])
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.contest_item,parent,false)
return MyViewHolder(itemView,mListener )
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val contests = contestlist[position]
holder.name.text = contestlist[position].name
holder.entry.text = contestlist[position].entry
holder.prize.text = contestlist[position].prize
holder.team.text = contestlist[position].team
holder.time.text = contestlist[position].time
holder.venue.text = contestlist[position].venue
holder.join_btn.text = contestlist[position].total_entry
}
我认为您通过添加两种不同的方式来设置侦听器而感到困惑。
var onItemClick
private lateinit var mListener
。 您需要删除一个或另一个。 第一个是您应该保留的那个,因为您通过滥用lateinit
和隐藏 setter function 后面的属性,在实现第二个时打破了一些约定。
您已经在每个视图持有者的根视图的点击侦听器中正确地调用onItemClick?.invoke(contestlist[adapterPosition])
。 你只需要删除这些东西:
private lateinit var mListener: onItemClickListener
interface onItemClickListener{
fun onItemClick(position: Int)
}
fun setOnItemClickListener(listener: onItemClickListener){
mListener = listener
}
并删除 ViewHolder 构造函数中的listener
器参数。
创建适配器(您的 Activity 或 Fragment)的 class 可以将 lambda 设置为适配器的onItemClick
属性的值,并在那里执行效果:
adapter.onItemClick = { contest ->
// do something like open another fragment
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.