Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.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 重置RecyclerView缓存视图_Android_Android Recyclerview - Fatal编程技术网

Android 重置RecyclerView缓存视图

Android 重置RecyclerView缓存视图,android,android-recyclerview,Android,Android Recyclerview,我已经在RecyclerView.onBindViewHolder中实现了setSelected,它选择了用户点击的行。如果用户选择另一行,则上一行也将被取消选择。问题是,当我向下滚动视图,使先前选择的行隐藏,然后选择新行,然后向上滚动,从缓存中检索旧行并选择其视图 是否有任何方法可以处理缓存视图,以便在其外观上取消选择旧行 以下是我在用户点击时重置上一行的代码。我正在使用selectedPos保存所选行pos: void row_click(View view) { v

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

是否有任何方法可以处理缓存视图,以便在其外观上取消选择旧行

以下是我在用户点击时重置上一行的代码。我正在使用
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);
通知所有已注册的观察者位置上的项目已使用可选有效负载对象更改


这是项目更改事件,而不是结构更改事件。这表明位置上的任何数据反映均已过时,应予以更新。位置处的项目保留相同的标识。

尝试
notifyItemChanged(selectedPos)@Eminem在何处使用此代码。在单击项目?是的,请尝试,您必须通知更改的项目item@Eminem是的,它有效。:)
notifyItemChanged(selectedPos);