Reputation: 57
How to implement a button inside recycler view. The below is my adapter class. In my recycle view
layout my button id is. btn_notify
. Where do I handle the event. Should I handle the event inside on onBindViewHolder
? I am not sure where to implement in on click listener inside the adapater.
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.bloodbankcompany.R
import com.example.bloodbankcompany.User2
class MyAdapter2(private val userList: ArrayList<User2>): RecyclerView.Adapter<MyAdapter2.MyViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyAdapter2.MyViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.list_item2,parent,false)
return MyViewHolder(itemView)
}
override fun onBindViewHolder(holder: MyAdapter2.MyViewHolder, position: Int) {
val user:User2 = userList[position]
holder.name.text= user.name
holder.phone.text= user.phone
holder.address.text =user.address
holder.bloodGroup.text= user.bloodgroup
holder.io = user.id
}
override fun getItemCount(): Int {
return userList.size
}
public class MyViewHolder(itemView : View): RecyclerView.ViewHolder(itemView){
val name : TextView = itemView.findViewById(R.id.tvfirstname1)
val phone :TextView= itemView.findViewById(R.id.tvphone11)
val address : TextView= itemView.findViewById(R.id.tvaddress1)
val bloodGroup: TextView =itemView.findViewById(R.id.tvbloodg1)
val id: TextView = itemView.findViewById(R.id.tvid)
var io: String? = ""
var button: Button = itemView.findViewById(R.id.btn_notify)
}
} ```
Upvotes: 0
Views: 2891
Reputation: 326
I would prefer ViewBinding or DataBinding rather than passing the views or using findViewById.
To answer your question, I think there are two ways to go.
1 .
override fun onBindViewHolder(holder: MyAdapter2.MyViewHolder, position: Int) {
val user:User2 = userList[position]
holder.name.text= user.name
holder.phone.text= user.phone
holder.address.text =user.address
holder.bloodGroup.text= user.bloodgroup
holder.io = user.id
holder.button.setOnClickListener{
//todo: enter code here
}
}
2.
override fun onBindViewHolder(holder: MyAdapter2.MyViewHolder, position: Int) {
holder.bind(holder.itemView)
}
public class MyViewHolder(itemView : View):RecyclerView.ViewHolder(itemView){
fun bind(){
var button: Button = itemView.findViewById(R.id.btn_notify)
button.setOnClickListener{
//todo: do something
}
view.setOnClickListener{
if(){
//todo: do something
}else{
//todo: do something
}
}
}
}
Upvotes: 2