2017-01-15 2 views
0

Как вы реализуете фильтр поиска при использовании RecyclerView + RealmRecyclerViewAdapter Адаптер с анимацией.Реализовать поисковый фильтр в recyclerview realm

@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. – AnixPasBesoin

+0

Вам следует попробовать реализовать класс ** Filterable ** и переопределить метод getFilter(). Это упростит вашу фильтрацию. Вы можете взглянуть на эту статью http://codetheory.in/android-filters/. Неважно, используете ли вы RealmRecyclerViewAdapter – clementiano

+0

с анимацией? теперь это действительно хороший вопрос. – EpicPandaForce

ответ

0

Не требуется фильтрация. Это отлично работает для меня. Я сохранил метод «applyFilter» под адаптером, но не стесняйтесь хранить его в любом месте. Вы должны вызвать этот метод всякий раз, когда есть изменение в тексте поиска. Метод applyFilter вызывает «обновление» на адаптере.

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); 
    } 
Смежные вопросы