搜索视图onQueryTextChange问 题

问题描述 投票:1回答:2

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

现在的问题是:

  1. 当我输入“juz”时,它应显示NoRecord,但它显示空白的白色屏幕。
  2. 当我输入“juzm”时它会显示NoRecord并隐藏回收器视图,但是当我将搜索文本退格到“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();
        }
    };
}
android searchview
2个回答
1
投票

这很有效

@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;
}

0
投票

我想这是关于你的系统操作系统的android studio的动态内存分配。你介意提一下你的系统配置吗?如果它低于4GB和i3-3rd,它将使你的系统滞后。 Android Studio需要最低8GB的RAM,以及您可以在各自的文档中找到的其他内容。

© www.soinside.com 2019 - 2024. All rights reserved.