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