Android adapter.notifyDataSetChanged在使用搜索视图进行搜索后不工作
我有一个搜索视图,可以过滤回收者视图中的项目;它可以正确过滤项目,但当我关闭搜索视图时,我的适配器Android adapter.notifyDataSetChanged在使用搜索视图进行搜索后不工作,android,android-recyclerview,Android,Android Recyclerview,我有一个搜索视图,可以过滤回收者视图中的项目;它可以正确过滤项目,但当我关闭搜索视图时,我的适配器notifyDataSetChanged将无法工作,例如,如果我将新项目添加到回收器视图,直到我关闭应用程序并再次打开它。这是我过滤项目的代码 public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText)
notifyDataSetChanged
将无法工作,例如,如果我将新项目添加到回收器视图,直到我关闭应用程序并再次打开它。这是我过滤项目的代码
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if (TextUtils.isEmpty(newText)){
adapter.resetList(userData.GetAllWords(user.getId()));
} else {
final ArrayList<Word> filteredModelList = filter(wordlist, newText);
adapter.setfilter(filteredModelList);
}
return false;
}
private ArrayList<Word> filter(ArrayList<Word> wordlistt, String query) {
query = query.toLowerCase();
final ArrayList<Word> filteredModelList = new ArrayList<>();
for (Word myword : wordlistt) {
if (myword.getWord().contains(query) || myword.getTranslation().contains(query)) {
filteredModelList.add(myword);
}
}
return filteredModelList;
}
但在我的回收器视图中仍然没有任何更改您每次都在创建数组的对象,这意味着适配器没有相同的数据实例来通知您执行此操作,只需在构造函数中创建单词列表对象一次,然后清除它并在其中添加项
public void setfilter(ArrayList<Word> filteredwordlist) {
//wordlist = new ArrayList<>();
wordlist.clear();
wordlist.addAll(filteredwordlist);
notifyDataSetChanged();
}
public void setfilter(ArrayList filteredwordlist){
//wordlist=newarraylist();
clear();
addAll(filteredwordlist);
notifyDataSetChanged();
}
重置时执行相同操作,您每次都在创建数组的对象,这意味着适配器没有相同的数据实例来通知。要执行此操作,只需在构造函数rest中创建一次wordlist对象,然后清除它并在其中添加项
public void setfilter(ArrayList<Word> filteredwordlist) {
//wordlist = new ArrayList<>();
wordlist.clear();
wordlist.addAll(filteredwordlist);
notifyDataSetChanged();
}
public void setfilter(ArrayList filteredwordlist){
//wordlist=newarraylist();
clear();
addAll(filteredwordlist);
notifyDataSetChanged();
}
重置时执行相同操作,如果执行此操作,
adapter=newwordadapter(…)代码>,则RecyclerView将丢失适配器上的引用。您将不再修改RecyclerView的适配器
这同样适用于getFilter
和setFilter()
。适配器将丢失您的单词列表上的引用,该引用为wordlist=new wordlist()
尝试使用:
wordList.clear();
而不是重新创建适配器。但仅更改列表内容。如果执行此操作,adapter=newwordadapter(…)代码>,则RecyclerView将丢失适配器上的引用。您将不再修改RecyclerView的适配器
这同样适用于getFilter
和setFilter()
。适配器将丢失您的单词列表上的引用,该引用为wordlist=new wordlist()
尝试使用:
wordList.clear();
而不是重新创建适配器。但只更改列表内容。tenx man对于我现在尝试的答案,recyclerview正在更改,但如果我添加新项目,所有以前的项目都将添加!!!哦,tanx兄弟,我删除了searchView.setOnCloseListener,现在它可以工作了。。我爱你:d和sry如果我的回复低于15天,我现在尝试了答案,回收视图是变化的,但是如果我添加新项目,所有以前的项目都将添加!!!哦,tanx兄弟,我删除了searchView.setOnCloseListener,现在它可以工作了。。我爱你:d和sry如果我的声誉低于15 Tanx亲爱的clear现在工作sry如果我的声誉低于15你应得+1 Tanx亲爱的clear现在工作sry如果我的声誉低于15你应得+1