在RecylerView中更改项目的背景颜色,仅位置

时间:2018-02-05 15:21:22

标签: android android-recyclerview

我有RecyclerView中所有项目的位置,我想编写一个代码,该代码以编程方式提供项目的背景颜色,只是根据提供给它的位置。到目前为止,我可以使用此recyclerView.smoothScrollToPosition(Integer.parseInt(value));.滚动到该项目,但无法突出显示该项目或为该项目提供背景颜色。

2 个答案:

答案 0 :(得分:0)

您有两个选择:

  1. 将其放入模型
  2. 使用装饰
  3. 第一种方法是直截了当的。连同适配器知道突出显示位置的项目列表。更改后,您将使列表无效并在onBindViewHolder中应用您的数据,包括可能的重点。

    onBindViewHolder(...) {
      // ...
      if (positionIsHighlighted) view.setBackground(dis) else view.setBackground(dat)
    }
    

    另一种方法是使用ItemDecoration做类似的事情。您在要突出显示的任何视图的顶部/下方绘制。这涉及自定义绘图和比第一种方法更多的知识。

    好处是它可能更具可重用性,您可以在所选视图的边界之上或之外绘制。

答案 1 :(得分:0)

你可以在你的适配器中定义一个变量,如selectedItemPosition : Int = 0,然后有一个像下面这样的setter:

fun setSelectedItem(position:Int){
    if(position == this.selectedItemPosition) return
    val oldPosition = this.selectedItemPosition
    this.selectedItemPosition = position
    if(oldPosition >=0 )
        notifyItemChanged(oldPosition)
    if(position >=0)
        notifyItemChanged(position)

在您的查看器中,检查adapterPosition是否等于selectedItemPosition。这样,当您更改所选项目时,旧选定项目将被取消选中,新选项目将被选中。

相关问题