Skip to content Skip to sidebar Skip to footer

Change Text Color Of Only Selected Item On Recyclerview Android Kotlin

class CustomeAdapterForTopics( val ctx: Context, var clickListener: OnTopicClick, val items: ArrayList ) : RecyclerView.Adapter

Solution 1:

classModelForTopics() {
    // ...var isSelected: Boolean = false
}

classCustomeAdapterForTopics(
    var clickListener: OnTopicClick,
    privateval items: List<ModelForTopics>
) : RecyclerView.Adapter<TopicViewHolder>() {
    var selectedItemIndex = -1overridefunonBindViewHolder(holder: TopicViewHolder, position: Int) {
        val item = items[position]
        holder.textViewName.text = item.name
        if (item.isSelected) {
            holder.textViewName.setTextColor(Color.parseColor("#FFBA5F"))
        } else {
            holder.textViewName.setTextColor(Color.parseColor("#25375F"))
        }
        holder.itemView.setOnClickListener {
            clickListener.onItemClick(item, position)
            item.isSelected = trueif (selectedItemIndex != -1)
                items[selectedItemIndex].isSelected = false
            selectedItemIndex = position
            notifyDataSetChanged()
        }
    }


    overridefunonCreateViewHolder(parent: ViewGroup, viewType: Int): TopicViewHolder =
        with(LayoutInflater.from(parent.context).inflate(R.layout.topics_row, parent, false)) {
            TopicViewHolder(this)
        }

    overridefungetItemCount() = items.size
}


classTopicViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    val textViewName: TextView = itemView.findViewById(R.id.textView)
}

Solution 2:

This might help you

classMyClassesAdapter(
privateval btnNames: List<String>,
privateval listener: OnItemClickListener
) : RecyclerView.Adapter<MyClassesAdapter.MyClassViewHolder>() {

privatevar selectedPos = -1privatevar prevSelectedPos = -1privatelateinitvar context: Context

overridefunonCreateViewHolder(parent: ViewGroup, viewType: Int): MyClassViewHolder {

    context = parent.context

    val binding = RvItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
    return MyClassViewHolder(binding)
}

overridefunonBindViewHolder(holder: MyClassViewHolder, position: Int) {
    holder.bind(btnNames[position])
    holder.selectedOption(selectedPos, position)
}

overridefungetItemCount(): Int {
    returnif (btnNames.isEmpty()) 0else
        btnNames.size
}

innerclassMyClassViewHolder(privateval binding: RvItemBinding) :
    RecyclerView.ViewHolder(binding.root), View.OnClickListener {
    funbind(btnText: String) {
        binding.btnItem.text = btnText
    }
    init {
        binding.btnItem.setOnClickListener(this)
    }

    overridefunonClick(v: View?) {

        if (selectedPos >= 0) {
            notifyItemChanged(selectedPos)
        }
        selectedPos = adapterPosition
        notifyItemChanged(selectedPos)

        listener.onClassItemClick(adapterPosition, btnNames)
    }

    funselectedOption(selectedPos: Int, position: Int) {

        if (position == prevSelectedPos) {
            binding.btnItem.background.setTint(ContextCompat.getColor(context, R.color.grey))
            binding.btnItem.setTextColor(ContextCompat.getColor(context, R.color.black))
            prevSelectedPos = -1return
        }

        if (selectedPos == position) {
            binding.btnItem.background.setTint(ContextCompat.getColor(context, R.color.sky_blue))
            binding.btnItem.setTextColor(ContextCompat.getColor(context, R.color.white))
            prevSelectedPos = position
        } else {
            binding.btnItem.background.setTint(ContextCompat.getColor(context, R.color.grey))
            binding.btnItem.setTextColor(ContextCompat.getColor(context, R.color.black))
        }
    }
}

    interfaceOnItemClickListener{
        funonClassItemClick(pos: Int, btns: List<String>)
    }

}

Solution 3:

You need to add isSelected field to ModelForTopics.

classModelForTopics {
    ...
    publicbooleanisSelected=false;
}

Then you need to add this code

classTopicViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

    //    var itemViewList: List<View> = ArrayList()val textViewName = itemView.findViewById(R.id.textView) as TextView
    //    itemViewList.add(itemView);funinitilise(items: ModelForTopics, action: OnTopicClick) {
            textViewName.text = items.name

            if(items.isSelected) {
                textViewName.setTextColor(Color.parseColor("#FFBA5F"))
            } else {
                textViewName.setTextColor(Color.parseColor("#25375F"))
            }

            itemView.setOnClickListener {
                action.onItemClick(items, adapterPosition)
                item.isSelected = !item.isSelected
                notifyDataSetChanged()
            }

        }
    }

Post a Comment for "Change Text Color Of Only Selected Item On Recyclerview Android Kotlin"