RecyclerView Filter
리사이클러뷰는 어댑터에서 Filterable를 implements 함으로서 필터 기능을 추가할 수 있습니다.
Filterable을 implements 하게 되면 getFilter 함수를 오버라이드 할 수 있습니다.
getFilter
이후 리턴되는 Filter의 performFiltering 메서드와 publishResults를 오버라이드 하여서 사용합니다.
본격적으로 필터링 기능을 구현합니다.

publishResults
RecyclerView Adapter
getFilter()
RecyclerViewAdapter
일반적인 Adapter와 다른 점은 리사이클러뷰의 내용물에 해당하는 List가 3가지가 추가된다는 점입니다.
필터링 되지 않은 리스트
필터링 중인 리스트
필터링 된 리스트
MainActivity에서 Adapter를 초기화할 때 내용물에 대한 데이터가 담긴 리스트를 받아서
1번 리스트와 3번 리스트로 할당해줍니다.
각각 1번과 3번에 할당해준 이유는 getFilter에서의 쓰임과 리사이클러뷰의 사이즈를 결정하는
getItemCount에서의 쓰임 때문에 할당되었습니다.
본격적으로 getFilter 함수에 대해 알아보도록 하겠습니다.
CharSequence constraint는 입력된 스트링이라고 생각하시면 됩니다.
MainAcitivity에서 onTextChanged 메서드 오버라이딩 해서
와 같은 형식으로 사용합니다.
입력받은 constraint를 스트링으로 변환해줍니다.
변환된 스트링이 비어있다면 필터링 되지 않은 리스트를 필터링 된 리스트로 사용합니다.
그렇지 않다면 필터링 되지 않은 리스트를 하나하나 검색하여서 일치하는 케이스에 대해서 필터링 중인 리스트에 추가합니다.
이후 필터링 중인 리스트를 필터링 된 리스트로 사용해줍니다.
마지막으로 FilterResults의 values 값으로 필터링 된 리스트를 넘겨줍니다.
이렇게 필터링이 완료되면 리사이클러뷰를 업데이트해주는 작업을 publishResults에서 수행합니다.
이 과정들이 리사이클러뷰를 필터링하는 과정이었습니다.
이 필터링은 MainAcitivity.java에서 보시다시피 edittext에 리스너를 추가해서 텍스트가 변환되면
아래의 명령어로 filter 작업 통해 뷰를 갱신합니다.
동작화면
위의 소스 코드는 Github에 올려두었습니다.
세계 최강을 꿈꾸는 안드로이드 Front-End 개발자입니다.
Github 주소: github.com/rkswlrbduf
이전 블로그 주소: blog.naver.com/rkswlrbduf => 블로그 이전중...