我创建了Kotlin移动应用。在我的应用程序中,我将RecyclerView
与适配器一起使用。
我想更改在RecyclerView
中单击的项目的背景颜色,当我单击另一个项目时,颜色将更改,并且单击的第一个项目的颜色恢复为默认颜色。
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val itemCategory: ProductCategoryData = categories[position]
holder.categoryId.text = itemCategory.id.toString()
println(holder.categoryId.text)
println(itemCategory.name?.get("En").toString())
holder.categoryName.text = itemCategory.name?.get("En").toString()
............
holder.itemView.setOnClickListener {
rowindex = position
mListener?.onItemClick(holder.itemView, categories[position])
}
if (rowindex == position) {
holder.itemView.setBackgroundColor(Color.parseColor("#FED07A"))
} else {
holder.itemView.setBackgroundColor(Color.parseColor("#ffffff"))
}
}
我应该在代码中进行哪些更改以使其起作用
答案 0 :(得分:2)
要更改 RecyclerView 中被点击项目的背景,您需要使用 iterface 捕捉适配器中的点击:
interface ItemClickListener {
fun onItemClickListener(item: Item, position: Int)
}
当我们点击时,我们将获得项目和项目位置。在适配器中的绑定函数中,我们将设置点击监听器:
container.setOnClickListener {
onClickListener.onItemClickListener(item, position)
}
在您的活动中,您将实现此接口:
class MainActivity : AppCompatActivity(), ItemAdapter.ItemClickListener {
接下来我们需要实现项目点击的背景变化逻辑。逻辑是这样的:当用户点击一个项目时,我们检查被点击项目的背景是否为白色(该项目之前没有被点击),如果这个条件为真,我们将改变该项目中所有项目的背景RecyclerView 为白色(如果有的话,使之前点击和标记的项目无效),然后将点击项目的背景颜色更改为青色以标记它。如果被点击的项目的背景是蓝绿色(这意味着用户再次点击之前标记的同一个项目),我们将所有项目的背景颜色更改为白色。首先,我们需要将我们的项目背景颜色作为 ColorDrawable。我们将使用迭代器函数遍历 RecyclerView 的所有项(子项),并使用 forEach() 函数更改每个项的背景。这个方法看起来像这样:
override fun onItemClickListener(item: Item, position: Int) {
val itemBackground: ColorDrawable =
binding.recycler[position].background as ColorDrawable
if (itemBackground.color == ContextCompat.getColor(this, R.color.white)) {
binding.recycler.children.iterator().forEach { item ->
item.setBackgroundColor(
ContextCompat.getColor(
this,
R.color.white
)
)
}
binding.recycler[position].setBackgroundColor(
ContextCompat.getColor(this, R.color.teal_200)
)
} else {
binding.recycler.children.iterator().forEach { item ->
item.setBackgroundColor(
ContextCompat.getColor(
this,
R.color.white
)
)
}
}
}
所以现在你改变了项目点击的背景,如果你点击同一个项目,你会把背景改回以前的样子。
答案 1 :(得分:0)
致电notifyDataSetChanged
pipenv install