我实现了一个搜索 View ,它从回收站 View 中搜索并相应地更新回收站。当它不匹配任何项目时,我将显示另一个布局“无记录”并将回收站 View 可见性设置为GONE。假设回收站 View 包含一个标题为 “judge” 的项目,当我输入前两个字母 “ju” 时,它会更新回收站 View 并将 judge 置于顶部。
现在的问题是:
- 当我键入 “juz” 时,它应该显示 NoRecord 但它显示的是空白屏幕。
- 当我键入 "juzm" 时,它显示 NoRecord 并隐藏回收器 View ,该 View 运行良好,但当我退格搜索文本到 "juz" 它显示 NoRecord,再次退格 "ju" 它显示 NoRecord 然后再次退格 "j" 它表明项目。
搜索查看方法
@Override
public boolean onQueryTextChange(String query) {
newsListAdapter.getFilter().filter(query);
if (newsListAdapter.getItemCount() > 0) {
listRecyclerView.setVisibility(View.VISIBLE);
noRecord.setVisibility(View.GONE);
} else {
listRecyclerView.setVisibility(View.GONE);
noRecord.setVisibility(View.VISIBLE);
}
return false;
}
适配器的过滤方法
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
filteredNewsList = newsList;
} else {
List<News.ArticlesBean> filteredList = new ArrayList<>();
for (News.ArticlesBean row : newsList) {
if (row.getTitle().toLowerCase().contains(charString.toLowerCase())) {
filteredList.add(row);
}
}
filteredNewsList = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = filteredNewsList;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
filteredNewsList = (ArrayList<News.ArticlesBean>) filterResults.values;
notifyDataSetChanged();
}
};
}
最佳答案
这有效
@Override
public boolean onQueryTextChange(String query) {
Filter.FilterListener listener = new Filter.FilterListener() {
@Override
public void onFilterComplete(int count) {
if (newsListAdapter.getItemCount() <=0) {
listRecyclerView.setVisibility(View.GONE);
noRecord.setVisibility(View.VISIBLE);
} else {
listRecyclerView.setVisibility(View.VISIBLE);
noRecord.setVisibility(View.GONE);
}
}
};
newsListAdapter.getFilter().filter(query, listener);
return false;
}
关于android - 搜索 View onQueryTextChange 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52361001/