2016-11-11 182 views
0

我有一個搜索視圖,可以過濾回收器視圖項目;它正確地過濾項目,但當我關閉搜索查看我的適配器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; 
} 

,但仍然沒有改變

回答

3

您每次創建數組的對象,這意味着適配器沒有相同的數據實例來通知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 –

1

。而且您不會再修改RecyclerView的適配器。

這同樣適用於你的getFiltersetFilter()。適配器在wordList = new WordList()的字詞列表中丟失了引用。

嘗試使用:

wordList.clear(); 

而不是重新創建您的適配器。但只能更改列表內容。

+0

坦親愛清楚現在正在SRY如果我的名聲在15歲以下,你應該+1 –

+0

沒問題,祝你好運。 –