2017-01-15 2 views
0

Wie implementieren Sie Suchfilter bei Verwendung RecyclerView + RealmRecyclerViewAdapter Adapter mit Animationen.Implementieren Suchfilter in Recyclerview Bereich

@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

Anruf notifydatachange auf Ihrem RecyclerView. – AnixPasBesoin

+0

Sie sollten versuchen, die Klasse ** Filterable ** zu implementieren und die Methode 'getFilter()' zu überschreiben. Dies macht Ihre Filterimplementierung übersichtlicher. Sie können sich diesen Artikel http://codetheory.in/android-filters/ ansehen. Es spielt keine Rolle, ob Sie RealmRecyclerViewAdapter – clementiano

+0

mit Animationen verwenden? Das ist eine wirklich gute Frage. – EpicPandaForce

Antwort

0

Sie brauchen nicht filterbar. Das funktioniert gut für mich. Ich habe die Methode "applyFilter" unter "Adapter" beibehalten, aber Sie können sie überall aufbewahren. Sie müssen diese Methode aufrufen, wenn der Suchtext geändert wird. Die Methode "applyFilter" ruft "update" auf dem Adapter auf.

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