【问题标题】:Search filter on RecyclerViewRecyclerView 上的搜索过滤器
【发布时间】:2017-11-11 17:38:23
【问题描述】:

我正在尝试在我的 RecyclerView 中实现搜索过滤器,就像在 this post 中一样

我现在面临的主要问题是 setOnQueryTextListener,在我的活动中:“找不到符号类 OnQueryTextListenerAdapter”。这可能是我确实需要创建的东西,或者我没有在我的活动中实施某些东西。它只是 MainActivity 扩展了 AppCompatActivity。

我的 onCreateMenuOptions 活动是:

public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);

final MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(new OnQueryTextListenerAdapter() { @Override public boolean onQueryTextSubmit(String filterString) { adapter.getFilter().filter(filterString); return true; } });

return true;

}

我的适配器如下所示:

public class AnimeAdapter extends RecyclerView.Adapter<AnimeAdapter.AnimeViewHolder> implements INameableAdapter {
    private List<Anime> items;
    private List<Anime> filteredItems;
    private AnimeFilter animeFilter;

用这个:

 public Filter getFilter() {
        if(animeFilter == null)
            animeFilter = new AnimeFilter(this, items);
        return animeFilter;
    }

    private static class AnimeFilter extends Filter {

        private final AnimeAdapter adapter;

        private final List<Anime> originalList;

        private final List<Anime> filteredList;

        private AnimeFilter(AnimeAdapter adapter, List<Anime> originalList) {
            super();
            this.adapter = adapter;
            this.originalList = new LinkedList<>(originalList);
            this.filteredList = new ArrayList<>();
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            filteredList.clear();
            final FilterResults results = new FilterResults();

            if (constraint.length() == 0) {
                filteredList.addAll(originalList);
            } else {
                final String filterPattern = constraint.toString().toLowerCase().trim();

                for (final Anime anime : originalList) {
                    if (anime.getTitle().contains(filterPattern)) {
                        filteredList.add(anime);
                    }
                }
            }
            results.values = filteredList;
            results.count = filteredList.size();
            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            adapter.filteredItems.clear();
            adapter.filteredItems.addAll((ArrayList<Anime>) results.values);
            adapter.notifyDataSetChanged();
        }

我在这里忘记了什么?

提前致谢!

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

    OnQueryTextListenerAdapter改成OnQueryTextListener

    SearhView.OnQueryTextListener

    【讨论】:

    • 谢谢!它现在可以编译和过滤,但它似乎没有反映在屏幕上。
    猜你喜欢
    • 2018-08-23
    • 2017-04-06
    • 2018-11-28
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2017-01-24
    相关资源
    最近更新 更多