单个数组列表模型类数据的多个搜索视图



我有一个带字段名称,代码和移动设备的模型类数组列表。我想对所有人使用搜索视图。例如,如果我在名称搜索视图xyz和移动搜索视图9768中写下,则它给出了xyz和9768的所有匹配。

 searchMasterList2.add(new SearchItemMaster("111", "222", "333"));
        searchMasterList2.add(new SearchItemMaster("555", "333", "444"));
        searchMasterList2.add(new SearchItemMaster("222", "444", "555"));
        searchMasterList2.add(new SearchItemMaster("333", "111", "222"));
        searchMasterList2.add(new SearchItemMaster("444", "555", "111"));

        final android.support.v7.widget.SearchView searchView1 = (android.support.v7.widget.SearchView) getView().findViewById(R.id.item_name_edtv);
        searchView1.setOnSearchClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                is_click_search_item=true;
                is_click_search_group=false;
            }
        });
        searchView1.setOnQueryTextListener(this);
        searchView1.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                is_click_search_item=true;
                is_click_search_group=false;
            }
        });
        final android.support.v7.widget.SearchView searchView2 = (android.support.v7.widget.SearchView) getView().findViewById(R.id.group_edtv);
        searchView2.setOnSearchClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                is_click_search_item=false;
                is_click_search_group=true;
            }
        });
        searchView2.setOnQueryTextListener(this);
        searchView2.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                is_click_search_item=false;
                is_click_search_group=true;
            }
        });
     @Override
        public boolean onQueryTextChange(String newText) {
            final List<SearchItemMaster> filteredModelList = filter(searchMasterList2, newText);
            Log.v("App", newText + ", " + searchMasterList2.size() + ", " + filteredModelList.size());
            adapter.animateTo(filteredModelList);
            recyclerView.scrollToPosition(0);
            return false;
        }
 private List<SearchItemMaster> filter(List<SearchItemMaster> numbers, String input_text) {
        input_text = input_text.toLowerCase();
        ArrayList<SearchItemMaster> filteredCompanyList = new ArrayList<>();
        for (SearchItemMaster searchItemMaster : numbers) {
            if (is_click_search_group) {
                final String moblieNo = searchItemMaster.getMoblieNo();
                if (moblieNo.contains(input_text)) {
                    filteredCompanyList.add(searchItemMaster);
                }
            }
            if (is_click_search_item) {
                final String code = searchItemMaster.getCode().toLowerCase();
                if (code.contains(input_text)) {
                    filteredCompanyList.add(searchItemMaster);
                }
            }
        }
        return filteredCompanyList;
    }

您可以使用循环并比较每个项目值。

for ex。如果您在名称搜索中输入XYZ和9876,则循环如下: -

ArrayList<SearchItemMaster> resultArrayList = new ArrayList<>();
for(SearchItemMaster searchItemMasterObj : searchItemMasterList) {
    if(searchItemMasterObj.getName().contains("Xyz") && searchItemMasterObj.getNumber().contains("9876")) {
        resultArrayList.add(searchItemMasterObj);
    }
}

然后您可以使用ResultArrayList显示结果。

希望这对您有帮助。:)

**我更改了以下代码,对我工作正常**

  ArrayList<SearchItemMaster> searchMasterList2 = new ArrayList<>();
    ArrayList<SearchItemMaster> filteredCompanyList1 = new ArrayList<>();
    ArrayList<SearchItemMaster> filteredCompanyList2 = new ArrayList<>();
     @Override
        public boolean onQueryTextChange(String newText) {
        if(is_click_search_item){
            filteredCompanyList1.clear();
        }
            if(is_click_search_group){
                filteredCompanyList2.clear();
            }
            final List<SearchItemMaster> filteredModelList = filter(searchMasterList2, newText);
            Log.v("App", newText + ", " + searchMasterList2.size() + ", " + filteredModelList.size());
            adapter.animateTo(filteredModelList);
            recyclerView.scrollToPosition(0);
            return false;
        }
        for (SearchItemMaster searchItemMaster : numbers) {
                    if (is_click_search_group) {
                        final String moblieNo = searchItemMaster.getMoblieNo().toLowerCase();;
                        if (moblieNo.contains(input_text)) {
                            filteredCompanyList2.add(searchItemMaster);
                            if(filteredCompanyList1.size()!=0) {
                                filteredCompanyList.add(searchItemMaster);
                                filteredCompanyList.retainAll(filteredCompanyList1);
                            }
                            else{
                                filteredCompanyList.add(searchItemMaster);
                                filteredCompanyList.retainAll(searchMasterList2);
                            }
                        }
                    }
                    if (is_click_search_item) {
                        final String code = searchItemMaster.getCode().toLowerCase();
                        if (code.contains(input_text)) {
                            filteredCompanyList1.add(searchItemMaster);
                            if(filteredCompanyList2.size()!=0){
                                filteredCompanyList.add(searchItemMaster);
                                filteredCompanyList.retainAll(filteredCompanyList2);
                            }
                            else{
                                filteredCompanyList.add(searchItemMaster);
                                filteredCompanyList.retainAll(searchMasterList2);
                            }
                        }
                    }
                }

最新更新