这是我的应用程序所做的,用户可以通过搜索框进行搜索。当他键入内容并匹配时,它会过滤gridview。但是当他试图删除时,没有记录显示。 清空搜索框时,我被困在显示整个记录。Android GridView不在空搜索框中显示记录
这是我已经试过:
MainActivity.class:
etSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
adapter.getFilter().filter(cs.toString());
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void afterTextChanged(Editable cs) {
}
});
CustomAdapter.class:
@Override
public Filter getFilter() {
if (starsFilter == null)
starsFilter = new StarsFilter();
return starsFilter;
}
private class StarsFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
// Create a FilterResults object
FilterResults results = new FilterResults();
constraint = constraint.toString().toLowerCase();
if (constraint != null && constraint.toString().length() > 0) {
ArrayList<HashMap<String, String>> filteredStars = new ArrayList<>();
for(HashMap<String, String> item : data){
if(item.toString().toLowerCase().contains(constraint)){
filteredStars.add(item);
}
}
results.values = filteredStars;
results.count = filteredStars.size();
} else {
synchronized(this) {
results.values = data;
results.count = data.size();
}
}
// Return our FilterResults object
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
data.clear();
if (constraint.length() == 0) {
notifyDataSetInvalidated();
} else {
for (HashMap<String, String> result : (ArrayList<HashMap<String, String>>) results.values) {
data.add(result);
}
notifyDataSetChanged();
}
}
}
任何想法?我会很感激你的帮助。提前致谢!
问题是什么?这个问题并不清楚。 – Lingviston
你真的想要做什么,你在哪里阻止 – Sree
@Lingviston我已更新我的帖子 –