2017-07-12 13 views
0

ツールバーに含まれていないSearchView(android.support.v7.widget.SearchView)でRecyclerViewをフィルタリングするにはどうすればよいですか?v7 SearchView android

モデルのAPIから取得している名前を使用してリサイクルアダプタで結果をフィルタリングしたいとします。 フラグメント内にrecyclerviewを設定しました。

+0

あなたのアダプターをFilterableインターフェースで実装しましたか? –

+0

番号。私はちょうどrecycviewの上の私の活動の中でsearchviewを設定しました。私はそのsearchviewを使用してrecyclerviewの結果をフィルタリングする方法を知らない –

+0

[これ](https://gist.github.com/pskink/cd3bbdd742b5b1905a790c76831b5d85) 'フィルタリング可能なアダプタを使用し、' matches() 'メソッドをオーバーライドしてください – pskink

答えて

0

あなたは、単に検索ビュー用のsearchviewまたは編集テキスト

によって

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
    @Override 
    public boolean onQueryTextSubmit(String text) { 
     return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String text) { 
     filter(s.toString(),getCustomDeviceCheckItemsList()); 
     return true; 
    } 
}); 



    private void filter(String text,ArrayList<CustomCheckItem> names) { 
     //new array list that will hold the filtered data 
     ArrayList<CustomCheckItem> filterdNames = new ArrayList<>(); 

     //looping through existing elements 
     for (CustomCheckItem s : names) { 

      //if the existing elements contains the search input 

      if (s.getTitle().toLowerCase().contains(text.toLowerCase())) { 

       //adding the element to filtered list 
       filterdNames.add(s); 
      } 
     } 

     //calling a method of the adapter class and passing the filtered list 
     childAdapter.filterList(filterdNames); 
    } 

を行うことができますし、アダプタにあなたが

public void filterList(ArrayList<CustomItem> filterdNames) { 
     this.list = filterdNames; 
     notifyDataSetChanged(); 
    } 

を記述する必要があり、あなたはでそれをしたい場合テキストを編集する

search.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 

         filter(s.toString(),getCustomDeviceCheckItemsList()); 

      } 
     }); 
関連する問題