【发布时间】:2018-08-31 16:37:48
【问题描述】:
当从searchView 的过滤器框中删除文本时,我无法在recyclerView 中设置以前的结果。我在适配器中使用以下代码来精细过滤数据。但问题是,当从搜索视图中删除搜索文本时,它不会在 recyclerView 中设置先前的值。
recyclerView适配器的get过滤方法
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
results = names;
} else {
ArrayList<tab> filteredList = new ArrayList<>();
for (tab row : names) {
// name match condition. this might differ depending on your requirement
// here we are looking for name or phone number match
if (row.getName().toLowerCase().contains(charString.toLowerCase()) || row.getmsg().contains(charSequence)) {
filteredList.add(row);
}
}
results = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = results;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
names = (ArrayList<tab>) filterResults.values;
// refresh the list with filtered data
notifyDataSetChanged();
}
};
}
主要活动代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView = (SearchView) menu.findItem(R.id.action_search)
.getActionView();
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
searchView.setMaxWidth(Integer.MAX_VALUE);
// listening to search query text change
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// filter recycler view when query submitted
gtxx.getFilter().filter(query);
// gtxx.notifyDataSetChanged();
return false;
}
@Override
public boolean onQueryTextChange(String query) {
// filter recycler view when text is changed
gtxx.getFilter().filter(query);
//gtxx.notifyDataSetChanged();
return false;
}
});
return true;
}
适配器中的设置值
gtxx = new listadapttor(con_list);
recyclerView.setAdapter(gtxx);
【问题讨论】:
标签: android filtering searchview android-recyclerview