[英]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.