android SearchView从数组返回结果,但不更新新信息

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

因此尝试使用searchview过滤RecyclerView,这是可行的,但是我发现的小错误是结果只是填充RecyclerView中第一项的信息,但是当单击或刷新屏幕时会显示正确的信息,在被搜索时,我猜想这与androidx有关,因为我关注的教程早于androidx。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options_menu, menu);
        MenuItem searchItem = menu.findItem(R.id.search);
        adapter = new adapter(mainDishes.this, recipes);
        SearchView searchView = (SearchView) searchItem.getActionView();
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                adapter.getFilter().filter(newText);
                return false;
            }
        });
        return true;
    }

    @Override
    public Filter getFilter() {
        return exampleFilter;
    }

    private Filter exampleFilter = new Filter() {

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            List<Recipes> Filtered = new ArrayList<>();
            if (constraint == null || constraint.length()== 0){
                Filtered.addAll(mRecipesFiltered);
            }else{
                String FilterPattern = constraint.toString().toLowerCase().trim();

                for (Recipes item : mRecipesFiltered){
                    if(item.getmrecipeName().toLowerCase().contains(FilterPattern)){
                        Filtered.add(item);
                    }
                }
            }
            FilterResults results = new FilterResults();
            results.values = Filtered;
            return results;
        }

        @Override
        protected void publishResults(CharSequence charSequence, FilterResults results) {
            mRecipes.clear();
            mRecipes.addAll((List)results.values);
            notifyDataSetChanged();

        }
    };
}

我一直在遵循encodinginflow.com教程,它可以正常工作,但是错误地指出并不确定从哪里开始。

android debugging android-recyclerview recycler-adapter searchview
1个回答
0
投票
search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { String userInput = newText.toLowerCase(); List<Recipes> newList = new ArrayList<>(); for (Recipes recipesList : item) { if(recipesList.getmrecipeName.toLowerCase().contains(userInput){ newList.add(recipesList); } } accountAdapter.upToDate(newList); return true; } });
© www.soinside.com 2019 - 2024. All rights reserved.