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