Java 管理如何在RecyclerView中回收视图
我正在寻找一种方法,在一个RecyclerView中过滤我的数据,而在应用过滤器时,给定视图的状态不会影响另一个视图。实际上,我有一个问题: 1.我通过点击add按钮(image msSxq.png)将“Martins”添加到我的好友列表中 不带过滤器的列表Java 管理如何在RecyclerView中回收视图,java,android,android-recyclerview,Java,Android,Android Recyclerview,我正在寻找一种方法,在一个RecyclerView中过滤我的数据,而在应用过滤器时,给定视图的状态不会影响另一个视图。实际上,我有一个问题: 1.我通过点击add按钮(image msSxq.png)将“Martins”添加到我的好友列表中 不带过滤器的列表 我执行了一次搜索,得到了以下结果(图像FGSwF.png): 执行搜索操作后的列表 很明显,随着清理操作的完成,我的列表内容会发生变化,然后新项目会取代旧项目并取代旧项目按钮状态 我正在寻找一种方法来避免这种情况。我试着读了几篇关于类似
最后,我试图深入了解recyclerview的工作原理,并找到了一个完美的解决方案。事实上,当我们在链接到recyclerview的searchview中过滤数据时,最后一个在不必要的情况下,会回收已经创建的视图并简单地更改其内容。为了避免这种情况,我们必须为创建的每个视图创建一个唯一的标识符,并告诉我们的recyclerview拥有唯一的视图ID。实际上,我做了这些事情: 在我的数据模型中,我创建了一个方法,该方法为创建的每个实例生成一个唯一的Id,如下所示:
public class MyDataModel {
private long mId;
...//others variables here
private long computeId(.../*some parameters if needed*/) {
// write code here to generate your unique code
return result;
}
public long getmId() {
return this.mId;
}
然后,在适配器中重写getItemId()方法
并且,我总是在适配器的构造函数中添加以下代码行:
this.setHasStableIds(true);
就这些 从
OnBindViewHolder
发布您的代码,然后进行搜索code@COYG我刚刚更新了帖子!
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if (adapter.getCompleteItemList() != null) {
adapter.getFilter().filter(newText);
}
return false;
}
});
public class MyDataModel {
private long mId;
...//others variables here
private long computeId(.../*some parameters if needed*/) {
// write code here to generate your unique code
return result;
}
public long getmId() {
return this.mId;
}
@override public long getItemId(int position) {
return myDataList.get(position).getmId();
}
this.setHasStableIds(true);