Search code examples
androidkotlinbuttonandroid-recyclerviewonclicklistener

How to I access button inside a recycler view?


This is my RecyclerView Adaper

class RecyclerAdapter(private val recyclerList: List): RecyclerView.Adapter(){

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): mainRecyclerViewHolder {
    val itemView = LayoutInflater.from(parent.context).inflate(R.layout.quiz_item_recycler_view,
        parent, false)

    return mainRecyclerViewHolder(itemView)
}

override fun getItemCount() = recyclerList.size

override fun onBindViewHolder(holder: mainRecyclerViewHolder, position: Int) {

    val currentItem = recyclerList[position]
    holder.imageView.setImageResource(currentItem.imageResource)
    holder.textView.text = currentItem.recyclerCardText


}

class mainRecyclerViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){

    val imageView: ImageView = itemView.rec_image
    val textView: TextView = itemView.text_view_1




}

}

And this is my data class

data class RecyclerItemMain(val imageResource: Int, val recyclerCardText: String, val button: Button)


Solution

  • Like this:

    override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
    
            holder.yourButton.setOnClickListener { v ->
    
                // Here your start your other activity or navigate to another fragment
            }
        }
    

    Remember that if you intent to send the user to diferent activities depending on the button, you have to create a when expression what will send the user to an activity depending on another value in the recyclerItem, for example the text of the item, in your case currentItem.recyclerCardText

    Here is your full adapter, re-organized:

    class RecyclerAdapter(recyclerList: List<CategorySectionIcon>) :
        RecyclerView.Adapter<YourAdapter.CustomViewHolder>() {
    
        private var recyclerList: List<CategorySectionIcon>? = recyclerList
    
    
        inner class CustomViewHolder(
            //Get a reference to the Views in our layout//
    
            val myView: View
        ) : RecyclerView.ViewHolder(myView) {
    
            var textView: TextView = myView.findViewById(R.id.your_text)
            var imageView: ImageView = myView.findViewById(R.id.your_image)
            var yourButton: Button = myView.findViewById(R.id.iv_category_imagen_icon)
    
        }
    
        override//Construct a RecyclerView.ViewHolder//
        fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomViewHolder {
            val layoutInflater = LayoutInflater.from(parent.context)
            val itemView =
                layoutInflater.inflate(R.layout.quiz_item_recycler_view, parent, false)
            return CustomViewHolder(itemView)
        }
    
        override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
    
            holder.textView.text = recyclerList!![position].recyclerCardText
            holder.imageView.setImageResource(recyclerList!![position].image)
    
            holder.yourButton.setOnClickListener { v ->
    
                // Here your start your other activity or navigate to another fragment
            }
        }
    
        //Calculate the item count for the RecylerView//
        override fun getItemCount(): Int {
            return recyclerList!!.size
        }
    }