android - 搜索 View onQueryTextChange 问题

标签 android searchview

我实现了一个搜索 View ,它从回收站 View 中搜索并相应地更新回收站。当它不匹配任何项目时,我将显示另一个布局“无记录”并将回收站 View 可见性设置为GONE。假设回收站 View 包含一个标题为 “judge” 的项目,当我输入前两个字母 “ju” 时,它会更新回收站 View 并将 judge 置于顶部。

现在的问题是:

  1. 当我键入 “juz” 时,它应该显示 NoRecord 但它显示的是空白屏幕。
  2. 当我键入 "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/

相关文章:

android - 谷歌搜索类似 SearchView

带有自定义建议适配器的 Android SearchView

java - 使用 Java 从两个类继承?

java - 没有引用或无法找到引用导致的不确定错误 - java.lang.IndexOutOfBoundsException

android - 在 Android 中获取所有联系人作为 vcard

android - java.lang.RuntimeException : Method called after release() 错误

安卓 SearchView OnFocusChangeListener : onFocusChange is not called at all

android - Imageview缩放保持高度固定和宽度可变

android - searchview不适用于自定义适配器kotlin