我在我的适配器中添加了这个方法:
public void filterlist(List<ListItem> 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;
}
}
此行adapter.filterlist(newlist);
我无法调用方法 filterlist 出现红色为什么?
答案 0 :(得分:0)
而不是
destinationCityName
请执行以下操作:
listItems = new ArrayList<>();
listItems.addAll(newlist);
这是因为不是创建列表的新实例,而是修改适配器的现有列表实例以通知更改,
答案 1 :(得分:0)
适配器中的更新列表如下所示,
public void updateList(ArrayList<Currency> temp) {
this.mCurrencyList = temp;
notifyDataSetChanged();
}
您必须在搜索框字段中应用此功能。 您在Query更改侦听器上应用了我实现了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);
}
});
最重要的是你应用了搜索视图,我应用了编辑文本视图。
但我认为这也适用于搜索视图。