adapter.notifyDataSetChanged在使用搜索视图搜索后不起作用

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(); 
} 

做同样的,

+0

TENX人的答案我想现在recyclerview是起了变化,但如果我增加新的项目以前所有的项目将增加! –

+0

哦坦的哥哥我删除searchView.setOnCloseListener,现在它的工作..我爱你:d和SRY基因,如果我的reputution在15 –

。而且您不会再修改RecyclerView的适配器。

这同样适用于你的getFiltersetFilter()。适配器在wordList = new WordList()的字词列表中丢失了引用。

尝试使用:

wordList.clear(); 

而不是重新创建您的适配器。但只能更改列表内容。

+0

坦亲爱清楚现在正在SRY如果我的名声在15岁以下,你应该+1 –

+0

没问题,祝你好运。 –