Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更改RecylerView中项目的背景色,仅具有位置_Android_Android Recyclerview - Fatal编程技术网

Android 更改RecylerView中项目的背景色,仅具有位置

Android 更改RecylerView中项目的背景色,仅具有位置,android,android-recyclerview,Android,Android Recyclerview,我有RecyclerView中所有项目的位置,我想编写一个代码,根据提供给它的位置,以编程方式给出项目的背景色。到目前为止,我可以使用以下recyclerView.smoothScrollToPosition(Integer.parseInt(value));,滚动到该项但无法突出显示该项目或为其提供背景色 您有两种选择: 把它放进模型里 装饰 第一种方法是直截了当的。适配器知道高亮显示位置的项目列表。更改后,您将使列表无效,并在onBindViewHolder中应用数据,包括可能的突出显示

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

您有两种选择:

  • 把它放进模型里
  • 装饰

  • 第一种方法是直截了当的。适配器知道高亮显示位置的项目列表。更改后,您将使列表无效,并在
    onBindViewHolder
    中应用数据,包括可能的突出显示

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

    另一种方法是使用。您可以在要高亮显示的任何视图的上/下进行绘制。这涉及到自定义绘图和比第一种方法更多的知识


    好处是它可能更易于重用,并且您可以在所选视图的顶部或外部进行绘制。

    您可以在适配器中定义一个变量,如
    selectedItemPosition:Int=0
    ,然后使用如下设置器:

    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)
    

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

    谢谢David的回答。实际上我在屏幕上有一张地图,上面有标记。我想在点击标记时,我应该能够在recylerview中突出显示与其对应的项目。此外,我正在访问其他类的recylerview。到目前为止,我只能滚动到列表中的项目。你知道这件事吗?