我正在尝试为列表视图表设置一个搜索过滤器,该过滤器只会返回完全匹配的结果。我已经设置了一个链接到我的表格布局的过滤器,如下所示:
private class RowFilter extends Filter{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if(constraint == null || constraint.length() == 0){
results.values = data;
results.count = data.size();
}
else{
ArrayList<Rows> filterData = new ArrayList<Rows>();
for (Rows r : data) {
if(r.getTenancy().toUpperCase().startsWith(constraint.toString().toUpperCase())){
filterData.add(r);
results.values = filterData;
results.count = filterData.size();
}else if(r.getAddress().toUpperCase().startsWith(constraint.toString().toUpperCase())){
filterData.add(r);
}else if(r.getLocation().toUpperCase().startsWith(constraint.toString().toUpperCase())){
filterData.add(r);
}else if(r.getName().toUpperCase().startsWith(constraint.toString().toUpperCase())){
filterData.add(r);
}
}
results.values=filterData;
results.count = filterData.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
if(results.count==0){
notifyDataSetInvalidated();
}else{if(results.count==1){}
data = (ArrayList<Rows>) results.values;
notifyDataSetChanged();
}
}
}
}
如果字符串与条目匹配,则将它们添加到已发布行的最终列表中。
我认为问题是它一直在更新,所以当我搜索不存在的内容时,它只显示以前搜索过的所有内容,而不是显示空表我想要的。我知道我在代码中遗漏了一些重要内容,以便实现这一点,所以任何帮助都会非常受欢迎,因为我已经花了很长时间在这上面。
这是main.java中的代码,
EditText editTxt = (EditText) findViewById(R.id.search_query);
editTxt.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
System.out.println("Text ["+s+"]-Start ["+start+"]-Before["+before+"]-Count["+count+"]");
if(count<before){
adapter.resetData();
}
adapter.getFilter().filter(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
编辑:基本上我只希望能够看到完全匹配我的搜索文本的结果,否则根本不打印任何表格。