adapter.notifyDataSetChanged在使用搜索视图搜索后不起作用
我有一个搜索视图,可以过滤回收器视图项目;它正确地过滤项目,但当我关闭搜索查看我的适配器notifyDataSetChanged
不会工作,例如,如果我将新项目添加到回收视图,直到我关闭该应用程序并再次打开它。这是我过滤项目的代码。adapter.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.addAll(filteredwordlist);
notifyDataSetChanged();
}
public void resetList(ArrayList<Word> newWordlist){
wordlist=new ArrayList<>();
wordlist.addAll(newWordlist);
notifyDataSetChanged();
}
我甚至重置我的适配器时,搜索视图关闭喜欢在我的回收站鉴于此
@Override
public boolean onMenuItemActionCollapse(MenuItem menuItem) {
adapter=new WordAdapter(MainActivity.this,userData.GetAllWords(user.getId()));
recyclerView.setAdapter(adapter);
return true;
}
,但仍然没有改变
您每次创建数组的对象,这意味着适配器没有相同的数据实例来通知do是,只需在构造函数中创建一个wordlist对象,清除它并在其中添加项目。正在重置时,如果你这样做adapter=new WordAdapter(...);
,则RecyclerView失去你的适配器上的参考
public void setfilter(ArrayList<Word> filteredwordlist) {
//wordlist = new ArrayList<>();
wordlist.clear();
wordlist.addAll(filteredwordlist);
notifyDataSetChanged();
}
做同样的,
。而且您不会再修改RecyclerView的适配器。
这同样适用于你的getFilter
和setFilter()
。适配器在wordList = new WordList()
的字词列表中丢失了引用。
尝试使用:
wordList.clear();
而不是重新创建您的适配器。但只能更改列表内容。
坦亲爱清楚现在正在SRY如果我的名声在15岁以下,你应该+1 –
没问题,祝你好运。 –
TENX人的答案我想现在recyclerview是起了变化,但如果我增加新的项目以前所有的项目将增加! –
哦坦的哥哥我删除searchView.setOnCloseListener,现在它的工作..我爱你:d和SRY基因,如果我的reputution在15 –