2017-01-15 8 views
0

RecyclerView + RealmRecyclerViewAdapterアダプターをアニメーションで使用する場合、どのように検索フィルターを実装しますか。recyclerviewの領域で検索フィルタを実装します

@Override 
public boolean onQueryTextSubmit(String query) { 
    Toaster.make(getContext(),query); 
    return true; 
} 

@Override 
public boolean onQueryTextChange(String query) { 
    query = query.toLowerCase(); 
    if(query.length()>0 && adapter!=null){ 

     recyclerView.scrollToPosition(0);*/ 
      //this do not update the recyclerview 
     realmResult = realm.where(GameListDatabase.class).equalTo("status",status).contains("name",query).findAll(); 

     return true; 
    } 


    return false; 
} 
+0

RecyclerViewでnotifydatachangeを呼び出します。 – AnixPasBesoin

+0

クラス** Filterable **を実装し、 'getFilter()'メソッドをオーバーライドする必要があります。これにより、フィルタの実装がより明確になります。この記事http://codetheory.in/android-filters/をご覧ください。 RealmRecyclerViewAdapter – clementiano

+0

をアニメーションで使用しているかどうかは関係ありませんか?今それは本当に良い質問です。 – EpicPandaForce

答えて

0

フィルタリングは不要です。これは私のためにうまく動作します。私はアダプタの下にメソッド "applyFilter"を保持していましたが、どこにでも自由に置くことができます。検索テキストが変更されたときはいつでも、このメソッドを呼び出す必要があります。 "applyFilter"メソッドはアダプタの "update"を呼び出します。

searchText.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) { 
      groupAdapter.applyFilter(s.toString()); 
     } 

     @Override 
     public void afterTextChanged(Editable s) {} 
    }); 


public void applyFilter(String searchString) { 
     if (searchString == null || "".equals(searchString)) { 
      realmResults = realm.where(Group.class).findAllSorted("groupName"); 
     } else { 
      realmResults = realm.where(Group.class).contains("groupName", searchString.toString().trim()).findAllSorted("groupName"); 
     } 
     updateData(realmResults); 
    } 
関連する問題