首页 > 解决方案 > 如何在单击时更改 RecyclerView 上未选择和选定项目的颜色?

问题描述

我有一个 RecyclerView 适配器,它为列表中的每个项目设置图标。这是适配器类

package m.e.myapplication

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.calculator_cost_currency_type_item.view.*

class CurrencyTypeAdapter: RecyclerView.Adapter<CurrencyTypeViewHolder>() {

private val currencyTypeList = listOf(R.drawable.icon_currency_dollar, R.drawable.icon_currency_euro, R.drawable.icon_currency_lira)

override fun getItemCount(): Int {
    return currencyTypeList.size
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CurrencyTypeViewHolder {
    val layoutInflater = LayoutInflater.from(parent.context)
    val cellForRow = layoutInflater.inflate(R.layout.calculator_cost_currency_type_item, parent, false)
    return CurrencyTypeViewHolder(cellForRow)
}

override fun onBindViewHolder(holder: CurrencyTypeViewHolder, position: Int) {
    val currencyTypeItem = currencyTypeList[position]

    holder.itemView.currencyTypeItemCostImageViewCCF.setImageResource(currencyTypeItem)
}
}

class CurrencyTypeViewHolder(view: View): RecyclerView.ViewHolder(view) {
}

这是从 MainActivity 调用它的方式

package m.e.myapplication

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    currencyTypeRecyclerViewCCF.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
    currencyTypeRecyclerViewCCF.adapter = CurrencyTypeAdapter()
    }
}

我想要更改与所选项目相对应的布局颜色的代码,以及更改未选定项目颜色的代码。提前致谢

标签: androidkotlin

解决方案


首先selectedposition var selectedposition=""在你的CurrencyTypeAdapter类中创建字符串类型变量名

现在将位置标签添加到您的itemview holder.itemview.tag="$position" //this is for to identify the itemview

onBindViewHolder现在在方法 中将 onClick 侦听器添加到您的 itemviewholder.itemView.setOnClickListener{ selectedposition="$position" notifyDataSetChanged() }

现在在 onBindViewHolder 方法中 if(selectedposition.equal("$position")){ //this is your selected item do what you want }


推荐阅读