마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

baseadpater에 filter기능 추가하기

0 추천
list_View1.setAdapter(new BaseAdapter() {
현재 이런식으로 되어있는데 클래스를 나눠서 수정
하기에는 너무 복잡하여서 포기하고
list_View1.setAdapter(new BaseAdapter implements Filterable() {
이런식으로 바꾸고싶은데 이렇게 바꾸면 아래 있는
 원래있던함수들이 다 오류가 뜨더라고요 혹시 
다른방법이 있나요? 필터 기능을 추가하고 싶은데 
도무지 진도가 안나가네요.. ㅠㅠ
류니 (540 포인트) 님이 2021년 11월 15일 질문

1개의 답변

+1 추천
 
채택된 답변

Interface 를 사용하는 방법이 잘 못 된 것 같아요. 인라인 클래스에 interface를 구현할 수는 없고 별도의 클래스로 만드셔야 해요. 아래처럼 new BaseAdapter 를 Android Studio 의 Refactor메뉴를 통해 별도의 클래스로 분리하세요. (BaseAdapter를 선택한 후 마우스 오른쪽 클릭)


클래스 이름 물어보는 Dialog가 나오면 적절한 클래스명을 주세요. 저는 MyAdapter라고 하겠습니다. 아래처럼 static inner class가 만들어질 겁니다.

private static class MyAdapter extends BaseAdapter  {
    ...
}

 

MyAdapter에 Filterable interface를 추가하세요.

private static class MyAdapter extends BaseAdapter implements Filterable  {
    ...
}

여기서 다시 Android Studio의 메뉴를 통해 구현할 메소드를 추가합니다.

 

이렇게 하면 아래처럼 Filterable의 메소드가 자동 추가됩니다.

private static class MyAdapter extends BaseAdapter implements Filterable {
        ...

        @Override
        public Filter getFilter() {
            return null;
        }
    }

 

참고로, 자바 class와 interface에 사용에 대한 기본적인 내용이므로 보고 지나가시는게 좋을 것 같아요. 그리고 뷰 재사용성등의 이유로 개발자들이 ListView에서 RecyclerView로 넘어간지가 몇 년되었습니다. 가능하면 RecyclerView로 바꾸시는길 권장드려요. 그게 유지보수에 용이할 것 같아요.

spark (226,420 포인트) 님이 2021년 11월 15일 답변
류니님이 2021년 11월 16일 채택됨
친절한 답변 감사합니다. 덕분에 문제가 해결되었어요 오늘도 새로운 것을 알아가네요 감사합니다.
...