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。到目前为止,我只能滚动到列表中的项目。你知道这件事吗?