Home > OS >  Kotlin recycler view , cannot get the complete array
Kotlin recycler view , cannot get the complete array

Time:10-27

class Category_recycler_view (var arrayList: ArrayList<Category_Spinner_model>) :
    RecyclerView.Adapter<Category_recycler_view.ViewHolder>() {


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {

        val v  = LayoutInflater.from(parent.context).inflate(R.layout.category_spinner_item,parent,false)
        val spinner_modal : Category_Spinner_model?  = arrayList.get(1)
        val ico = v.findViewById<ImageView>(R.id.category_ico)
        val text = v.findViewById<TextView>(R.id.category_text)
        val dropdown_ico = v.findViewById<ImageView>(R.id.category_dropdowm)
        ico?.setImageResource(spinner_modal!!.getIco())
        text.text = spinner_modal!!.getTextt()
        dropdown_ico.setImageResource(spinner_modal.getDropico())

        return ViewHolder(v)
    }

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

       val itemsView  = arrayList[position]

    }

    override fun getItemCount(): Int {
        return arrayList.size
    }

    class ViewHolder (Itemview : View) : RecyclerView.ViewHolder(Itemview) {

    }

}

I need every element of the array to display, but i can give only one index at a time how to display every element of the array modal

CodePudding user response:

onCreateViewHolder() is only for creating a view holder that can be used by any list item. You need to populate it in onBindViewHolder().

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val v  = LayoutInflater.from(parent.context).inflate(R.layout.category_spinner_item,parent,false)
    return ViewHolder(v)
}

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

    val spinner_modal = arrayList[position]
    val ico = holder.itemView.findViewById<ImageView>(R.id.category_ico)
    val text = holder.itemView.findViewById<TextView>(R.id.category_text)
    val dropdown_ico = holder.itemView.findViewById<ImageView>(R.id.category_dropdowm)
    ico?.setImageResource(spinner_modal.getIco())
    text.text = spinner_modal.getTextt()
    dropdown_ico.setImageResource(spinner_modal.getDropico())

}

However, you should avoid using findViewById in onBindViewHolder because then it has to search for the views again every time the view holder is recycled. Instead, you should create properties in your ViewHolder class for this. So a better complete solution is:

class Category_recycler_view (var arrayList: ArrayList<Category_Spinner_model>) :
    RecyclerView.Adapter<Category_recycler_view.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val v  = LayoutInflater.from(parent.context).inflate(R.layout.category_spinner_item,parent,false)
        return ViewHolder(v)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val spinner_modal = arrayList[position]
        holder.ico.setImageResource(spinner_modal.getIco())
        holder.text.text = spinner_modal.getTextt()
        holder.dropdown_ico.setImageResource(spinner_modal.getDropico())
    }

    override fun getItemCount(): Int {
        return arrayList.size
    }

    class ViewHolder (Itemview : View) : RecyclerView.ViewHolder(Itemview) {
        val ico: ImageView = findViewById(R.id.category_ico)
        val text: TextView = findViewById(R.id.category_text)
        val dropdownIco: ImageView = findViewById(R.id.category_dropdowm)
    }

}

CodePudding user response:

suppose if you want to set text to the text view in recyclerView then you need to do like this , consider it as an example ~

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

   holder.textView.text =  arrayList[position].someTextVariable

}

here someTextvariable is the variable under the model class which is of String Type

  • Related