2017-01-15 1 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

클래스 ** 필터링 가능 **을 구현하고'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); 
    }