我在setSelected
中实施了RecyclerView.onBindViewHolder
,并选择了用户点击的行。如果用户选择另一行,则前一行也会被取消选择。问题是当我向下滚动视图以便先前选择的行被隐藏,然后我选择新行然后向上滚动,从缓存中检索旧行并选择其视图。
有没有办法处理缓存视图,所以我可以在其外观上取消选择旧行?
以下是我在用户点按时重置上一行的代码。我正在使用selectedPos
保存选定的行pos:
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);
答案 0 :(得分:0)
notifyItemChanged(selectedPos);
通知任何已注册的观察员,该位置的项目已更改为可选的有效负载对象。
这是项目更改事件,而不是结构更改事件。它表示位置数据的任何反映都已过时,应予以更新。位置处的项目保留相同的身份。(1)