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"