Android 在RecyclerView中搜索时出错?

Android 在RecyclerView中搜索时出错?,android,android-recyclerview,call,Android,Android Recyclerview,Call,我在适配器中添加此方法: public void filterlist(List<ListItem> newlist){ listItems = new ArrayList<>(); listItems.addAll(newlist); notifyDataSetChanged(); } } public void filterlist(List newlist){ listItems=new ArrayList(); listItems.ad

我在适配器中添加此方法:

public  void filterlist(List<ListItem> newlist){
    listItems = new ArrayList<>();
    listItems.addAll(newlist);
    notifyDataSetChanged(); }
}
public void filterlist(List newlist){
listItems=new ArrayList();
listItems.addAll(newlist);
notifyDataSetChanged();}
}
我在MainActivity中使用这段代码来过滤我不能调用filterlist()方法的列表

searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            //Do some magic
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            //Do some magic
            String item = newText.toLowerCase();
            List<ListItem> newlist = new ArrayList<>();
            for (ListItem name:listItems){
                if (name.getDoname().toLowerCase().contains(newText)){newlist.add(name);}
            }

            // the is problem in this line

            adapter.filterlist(newlist); 
            return true;
        }
    }
searchView.setOnQueryTextListener(新材料searchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串查询){
//施点魔法
返回false;
}
@凌驾
公共布尔onQueryTextChange(字符串newText){
//施点魔法
String item=newText.toLowerCase();
List newlist=newarraylist();
对于(ListItem名称:listItems){
如果(name.getDoname().toLowerCase().contains(newText)){newlist.add(name);}
}
//问题在于这方面
adapter.filterlist(新列表);
返回true;
}
}
此行
adapter.filterlist(newlist);

我无法调用方法过滤器列表以红色显示给我为什么?

而不是

listItems = new ArrayList<>();
listItems.addAll(newlist);

这是因为不是创建列表的新实例,而是修改适配器的现有列表实例以通知更改,

适配器中的更新列表如下所示

 public void updateList(ArrayList<Currency> temp) {
            this.mCurrencyList = temp;
            notifyDataSetChanged();
        }
public void更新列表(ArrayList temp){
this.mCurrencyList=temp;
notifyDataSetChanged();
}
您必须在搜索框字段中应用此选项。 您应用了查询更改侦听器,我实现了addTextChangeListener

searchBox.addTextChangedListener(new TextWatcher() {
  @Override
  public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

  @Override
  public void onTextChanged(CharSequence s, int start, int before, int count) {}

    @Override
    public void afterTextChanged(Editable s) {
    ArrayList<Currency> temp = new ArrayList();
    for (Currency d : mCurrencyList) {
    if (d.getCode().toLowerCase().contains(s.toString().toLowerCase())) {
    temp.add(d);
                }
                 }
    mSelectCurrencyAdapter.updateList(temp);
                    }
    });
searchBox.addTextChangedListener(新的TextWatcher(){
@凌驾
public void beforeTextChanged(字符序列s、int start、int count、int after){}
@凌驾
public void onTextChanged(字符序列,int start,int before,int count){}
@凌驾
公共无效后文本已更改(可编辑){
ArrayList temp=新的ArrayList();
对于(货币d:mCurrencyList){
如果(d.getCode().toLowerCase().contains(s.toString().toLowerCase())){
温度添加(d);
}
}
mSelectCurrencyAdapter.updateList(临时);
}
});
最重要的是,您应用了搜索视图,而我应用了编辑文本视图


但我认为这也适用于搜索视图。

检查适配器是否是自定义适配器的实例。是否在此代码中有任何异常?如果有,请粘贴logcat。无法解析方法“filterlist(java.util.List)”将MainActivity和适配器的所有代码放入。谢谢,问题在于初始化我的适配器
searchBox.addTextChangedListener(new TextWatcher() {
  @Override
  public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

  @Override
  public void onTextChanged(CharSequence s, int start, int before, int count) {}

    @Override
    public void afterTextChanged(Editable s) {
    ArrayList<Currency> temp = new ArrayList();
    for (Currency d : mCurrencyList) {
    if (d.getCode().toLowerCase().contains(s.toString().toLowerCase())) {
    temp.add(d);
                }
                 }
    mSelectCurrencyAdapter.updateList(temp);
                    }
    });