如何更改 bg recyclerview 特定位置 [Kotlin]

Posted

技术标签:

【中文标题】如何更改 bg recyclerview 特定位置 [Kotlin]【英文标题】:How to change bg recyclerview specific position [ Kotlin ] 【发布时间】:2021-02-23 01:14:12 【问题描述】:

第一季度 我用 cardview 做了一些 recyclerview 我想点击某个位置并将 bg 当前位置更改为黑色,将适配器中的另一个位置更改为绿色

第二季度 我想更改适配器中的特定位置

class RecyclerAdapterBrand(private var imageList: List<Int>) :
RecyclerView.Adapter<RecyclerAdapterBrand.ViewHolder>() 

inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) 

    val imageView: ImageView = itemView.findViewById(R.id.imgViewBrand)
    val cardView: CardView = itemView.findViewById(R.id.cardViewBrand)

    init 
        // Set Recycler Click
        itemView.setOnClickListener  v: View ->
            val positionClick: Int = (adapterPosition + 1)
        
    


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


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

    holder.itemView.post 
        holder.imageView.setImageResource(imageList[position])
    



override fun getItemCount(): Int 
    return imageList.size

【问题讨论】:

分享你的代码sn-ps, 已编辑添加代码 【参考方案1】:

您可以轻松更改单击项目的背景。您必须创建一个名为selectedposition 的变量并分配给-1。每当您单击该项目时,您必须将单击的position 值设置为selectedPosition。并在recyclerview 的项目ClickListener 方法上调用notifyDataSetChanged() 方法。然后在OnBindViewHolder()方法中,你必须检查位置和选择的位置是否相同,将背景颜色设置为绿色。否则将背景颜色设置为黑色。

inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) 
    var selectedPosition=-1
    val imageView: ImageView = itemView.findViewById(R.id.imgViewBrand)
    val cardView: CardView = itemView.findViewById(R.id.cardViewBrand)

    init 
        // Set Recycler Click
        itemView.setOnClickListener  v: View ->
            selectedPosition=(adapterPosition + 1)
            val positionClick: Int = (adapterPosition + 1)
            notifyDataSetChanged()

        
    


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


override fun onBindViewHolder(holder: ViewHolder, position: Int) 
   if(selectedPosition==position)

    holder.itemView.setBackground(#green color)
    else
    
    holder.itemView.post 
        holder.imageView.setImageResource(#black color)
    

   





override fun getItemCount(): Int 
    return imageList.size

我已将这些行包含在您的适配器类中。希望它能解决您的问题。

【讨论】:

我在 setOnClickListener 中将 "selectedPosition" 更改为 2 但在 onBindViewHolder "selectedPosition" 上保持 -1 你在 setOnClickListener 中调用 notifyDataSetChanged() 了吗??

以上是关于如何更改 bg recyclerview 特定位置 [Kotlin]的主要内容,如果未能解决你的问题,请参考以下文章

在使用 Firebase 和 ChildEventListener 时,如何在方向更改后保留 RecyclerView 的位置?

获取特定位置的 ViewHolder - RecyclerView

RecyclerView - 获取特定位置的视图

在 RecyclerView 中的特定位置拖放停止

更改 recyclerView 滚动位置参考

滚动到特定位置时 Recyclerview 崩溃