[英]Change text color of only selected item on RecyclerView android Kotlin
class CustomeAdapterForTopics(
val ctx: Context,
var clickListener: OnTopicClick,
val items: ArrayList<ModelForTopics>
) : RecyclerView.Adapter<TopicViewHolder>() {
override fun onBindViewHolder(holder: TopicViewHolder, position: Int) {
val user: ModelForTopics = items[position]
holder.textViewName.text = user.name
holder.initilise(items.get(position), clickListener)
// if() {
// holder.textViewName.setTextColor(Color.parseColor("#FFA07A"));
//
//
// } else {
// holder.textViewName.setTextColor(Color.parseColor("#FFBA5F"));
//
// }
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TopicViewHolder {
val v = LayoutInflater.from(parent?.context).inflate(R.layout.topics_row, parent, false)
return TopicViewHolder(v)
}
override fun getItemCount(): Int {
return items.size
}
}
class TopicViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
// var itemViewList: List<View> = ArrayList()
val textViewName = itemView.findViewById(R.id.textView) as TextView
// itemViewList.add(itemView);
fun initilise(items: ModelForTopics, action: OnTopicClick) {
textViewName.text = items.name
// textViewName.setTextColor(Color.parseColor("#25375F"))
itemView.setOnClickListener {
action.onItemClick(items, adapterPosition)
// textViewName.setTextColor(Color.parseColor("#FFBA5F"))
// if() {
// textViewName.setTextColor(Color.parseColor("#FFBA5F"))
// }
// else{
// textViewName.setTextColor(Color.parseColor("#25375F"))
// }
}
}
}
interface OnTopicClick {
fun onItemClick(items: ModelForTopics, position: Int)
}
我想更改通過 recyclerView 顯示的選定項目的顏色。 我只是沒有得到所選項目的 position。 我只是在網上看到了解決方案,但沒有得到它,或者它們主要是 java 代碼。 我是新開發的。 讓我找到點擊項目的確切 position 以便我可以設置條件,否則 function
class ModelForTopics() {
// ...
var isSelected: Boolean = false
}
class CustomeAdapterForTopics(
var clickListener: OnTopicClick,
private val items: List<ModelForTopics>
) : RecyclerView.Adapter<TopicViewHolder>() {
var selectedItemIndex = -1
override fun onBindViewHolder(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 = true
if (selectedItemIndex != -1)
items[selectedItemIndex].isSelected = false
selectedItemIndex = position
notifyDataSetChanged()
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TopicViewHolder =
with(LayoutInflater.from(parent.context).inflate(R.layout.topics_row, parent, false)) {
TopicViewHolder(this)
}
override fun getItemCount() = items.size
}
class TopicViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val textViewName: TextView = itemView.findViewById(R.id.textView)
}
您需要將 isSelected 字段添加到 ModelForTopics。
class ModelForTopics {
...
public boolean isSelected = false;
}
然后你需要添加這個代碼
class TopicViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
// var itemViewList: List<View> = ArrayList()
val textViewName = itemView.findViewById(R.id.textView) as TextView
// itemViewList.add(itemView);
fun initilise(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()
}
}
}
這可能會幫助你
class MyClassesAdapter(
private val btnNames: List<String>,
private val listener: OnItemClickListener
) : RecyclerView.Adapter<MyClassesAdapter.MyClassViewHolder>() {
private var selectedPos = -1
private var prevSelectedPos = -1
private lateinit var context: Context
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyClassViewHolder {
context = parent.context
val binding = RvItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return MyClassViewHolder(binding)
}
override fun onBindViewHolder(holder: MyClassViewHolder, position: Int) {
holder.bind(btnNames[position])
holder.selectedOption(selectedPos, position)
}
override fun getItemCount(): Int {
return if (btnNames.isEmpty()) 0
else
btnNames.size
}
inner class MyClassViewHolder(private val binding: RvItemBinding) :
RecyclerView.ViewHolder(binding.root), View.OnClickListener {
fun bind(btnText: String) {
binding.btnItem.text = btnText
}
init {
binding.btnItem.setOnClickListener(this)
}
override fun onClick(v: View?) {
if (selectedPos >= 0) {
notifyItemChanged(selectedPos)
}
selectedPos = adapterPosition
notifyItemChanged(selectedPos)
listener.onClassItemClick(adapterPosition, btnNames)
}
fun selectedOption(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 = -1
return
}
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))
}
}
}
interface OnItemClickListener {
fun onClassItemClick(pos: Int, btns: List<String>)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.