簡體   English   中英

更改 RecyclerView 上僅選定項目的文本顏色 android Kotlin

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM