重置回收器视图缓存视图



我已经在RecyclerView.onBindViewHolder中实现了setSelected,它选择了用户点击的行。如果用户选择另一行,则前一行也会被取消选择。问题是当我向下滚动视图以隐藏先前选择的行时,然后选择新行然后向上滚动,从缓存中检索旧行并选中其视图。

有没有办法处理缓存视图,以便我可以取消选择旧行的外观?

以下是我在用户点击时重置上一行的代码。我正在使用selectedPos保存选定的行位置:

void row_click(View view) {
view.setSelected(true);
RecyclerView rv = (RecyclerView) view.getParent();
// reset previous selection
if (selectedPos != RecyclerView.NO_POSITION) {
View previousView = rv.getChildAt(selectedPos);
if (previousView != null) {
((RecordingsViewHolder) rv.getChildViewHolder(previousView)).equalizer.hide();
previousView.setSelected(false);
}
}
selectedPos = rv.getChildLayoutPosition(view);
playlist.setValue((com.alhuda.al_huda_live.common.viewmodel.Playlist) view.getTag());
}

onBindViewHolder我使用此代码选择/取消选择该行:

holder.itemView.setSelected(selectedPos == position);
notifyItemChanged(selectedPos);

通知任何已注册的观察者,位置上的项目已使用可选的有效负载对象进行更改。

这是一个物料更改事件,而不是结构更改事件。它表示位置数据的任何反映都已过时,应更新。位置上的项保留相同的标识。(1(

最新更新