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

Android 如何更改bg recyclerview特定位置[Kotlin],android,kotlin,android-recyclerview,android-cardview,Android,Kotlin,Android Recyclerview,Android Cardview,Q1 我用cardview做了一些recyclerview,我想在适配器中单击某个位置并将bg当前位置更改为黑色,将另一个位置更改为绿色 class RecyclerAdapterBrand(private var imageList: List<Int>) : RecyclerView.Adapter<RecyclerAdapterBrand.ViewHolder>() { inner class ViewHolder(itemView: View) : Recycl

Q1 我用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
}
Q2 我想更改适配器中的某些特定位置

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
}
class RecyclerAdapterBrand(私有var imageList:List):
RecyclerView.Adapter(){
内部类ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
val imageView:imageView=itemView.findViewById(R.id.imgViewBrand)
val cardView:cardView=itemView.findViewById(R.id.cardViewBrand)
初始化{
//设置回收器单击
itemView.setOnClickListener{v:View->
val位置单击:Int=(适配器位置+1)
}
}
}
override onCreateViewHolder(父级:ViewGroup,viewType:Int):ViewHolder{
val v=LayoutInflater.from(parent.context)。充气(
R.layout.recy_品牌_布局,
父母亲
假的
)
返回视窗支架(v)
}
覆盖BindViewHolder(holder:ViewHolder,位置:Int){
holder.itemView.post{
holder.imageView.setImageResource(imageList[位置])
}
}
重写getItemCount():Int{
返回imageList.size
}

您可以轻松更改单击项目的背景。您必须创建一个名为
selectedposition
的变量,并将其分配给
-1
。每当单击项目时,您必须将单击的
位置
值设置为
selectedposition
。然后调用
notifyDataSetChanged()
方法在recyclerview的项ClickListener方法中。然后在
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上,您在setOnClickListener中调用了notifyDataSetChanged()??