2017-06-06 58 views
0

我有一個帶有字段名稱,代碼和移動設備的模型類數組列表。我想爲所有人使用搜索視圖。例如,如果我的名字搜索視圖XYZ和移動搜索視圖中寫9768,然後它給某某的所有比賽和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; 
    } 

回答

0

可以使用循環和比較每個項目值它做。

對於防爆。如果您在名稱搜索在數量輸入的Xyz和9876然後循環,如: -

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

,然後你可以使用resultArrayList顯示結果。

希望這會幫助你。 :)

+0

它不是爲我工作..但我必須找出解決方案...非常感謝您的回答 –

0

**我改變了下面的代碼爲我工作的罰款**

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