如何分离 SearchView 项目以过滤 RecyclerView

How to separate SearchView items to filter a RecyclerView

目前,我正在开发一个 activity,它在 it.Now 中有 RecyclerView 和 SearchView,RecyclerView 和 SearchView 工作正常,但有一个问题我不知道如何解决解决,你在 searchView 部分看到我们的任务是制作一个接受 2 个或更多 searchItems 的 SearchView,这些 searchItems 必须用逗号或 space 分隔,以便在第二个 searchitem 与中的项目匹配时再次过滤 recyclerview RecyclerView,例如我输入 searchitem "Big" 我需要再次将它与另一个 searchitem 分开,例如 "Black"

这是搜索视图的代码

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pet_book_main);

        if(savedInstanceState != null){
           mSearchString=savedInstanceState.getString(SEARCH_KEY);
        }

        pet_title=(TextView)findViewById(R.id.pet_book_title);
        petbook=(RecyclerView)findViewById(R.id.pet_book_pet);
        navbot=(BottomNavigationView) findViewById(R.id.petbook_navbot);
        toolbar=(Toolbar)findViewById(R.id.petbook_toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        toolbar.setTitle("");
        linearLayoutManager=new LinearLayoutManager(this);
        petbook.setHasFixedSize(true);
        petbook.setLayoutManager(linearLayoutManager);
        refresh();
        disableShiftMode(navbot);
}

     @Override
    public boolean onCreateOptionsMenu(final Menu menu) {
        MenuInflater menuInflater= getMenuInflater();
        menuInflater.inflate(R.menu.petbook_searck,menu);
        searchItem=menu.findItem(R.id.pet_book_search_mode);
        searchView =(SearchView)MenuItemCompat.getActionView(searchItem);

        if (mSearchString != null && !mSearchString.isEmpty()) {
            searchItem.expandActionView();
            searchView.setQuery(mSearchString, true);
            searchView.clearFocus();
        }
        search(searchView);
        MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                pet_title.setVisibility(View.INVISIBLE);
                return true;
            }

            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                pet_title.setVisibility(View.VISIBLE);
                return true;
            }
        });
        return true;
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mSearchString = searchView.getQuery().toString();
        outState.putString(SEARCH_KEY, mSearchString);
    }

      public void search(android.support.v7.widget.SearchView search)
    {
        search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                newText=newText.toLowerCase();
                newList=new ArrayList<>();
                for(petbook_getItem items : bookItem){
                    String pets=items.getPet_name().toLowerCase();
                    if(pets.contains(newText))
                        newList.add(items);
                }
                adapter.filterSearch(newList);
                adapter.notifyDataSetChanged();
                return true;
            }
        });
    }

此代码处理搜索中的用户输入,可以是 multiple comma separated search items:

search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    .....


    @Override
    public boolean onQueryTextChange(String newText) {
        newText = newText.toLowerCase();

        // remove leading comma or space
        String string2 = newText.replaceAll("^[,\s]+", "");

        // return early for invalid input (empty)
        if (string2.isEmpty()) {
            return true;
        }

        // split by comma & space if any
        List<String> inputList = Arrays.asList(string2.split("[,\s]+"));

        newList = new ArrayList<>();

        for (petbook_getItem items : bookItem){
            String pets = items.getPet_name().toLowerCase();

            // Check for matching by looping through each search items
            for (String inputTxt : inputList) {
                if (pets.contains(inputTxt)) {
                    newList.add(items);    
                    break;
                }
            }
        }

        adapter.filterSearch(newList);
        adapter.notifyDataSetChanged();
        return true;
    }
});