重置RecyclerView缓存视图

时间:2018-05-18 07:29:48

标签: android android-recyclerview

我在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);

1 个答案:

答案 0 :(得分:0)

notifyItemChanged(selectedPos);

通知任何已注册的观察员,该位置的项目已更改为可选的有效负载对象。

这是项目更改事件,而不是结构更改事件。它表示位置数据的任何反映都已过时,应予以更新。位置处的项目保留相同的身份。(1)