Seize the day

POST : Android Dev Study

ListView 패턴 구현하기 simplelist

ListView를 이용하여 목록을 구현하는 방법에는 일정한 패턴이 있다. 여러 목록 페이지를 구현하다 보면 비슷하거나 거의 동일한 코드를 복사해서 붙여넣기를 반복하게 된다. 생산성을 높이고, 중복코드를 제거하고 모듈화하여 재사용성을 높이는 방법을 찾아보자. 


목록 페이지의 일반적인 플로우

1. 처음에 페이지에 진입하게 되면 전체 로딩바를 표시하고 첫 데이타 불러오기를 시작한다. 

2. 여기서 실패하면 로딩 실패 뷰를 표시한다. 

3. 로딩 실패 뷰에서는 재시도 버튼이 있는데 재시도 버튼을 누르면 1번을 다시 반복한다.

4. 1번의 결과 로딩이 성공하여, 응답 데이타가 없다면 empty View (데이타가 없습니다.)를 보여준다. 

5. 1번의 결과 로딩이 성공하여, 응답 데이타가 있으면 목록에 표시한다.

6. 목록의 마지막 하단부가 보여지면, 자동으로 더 보기 로딩바를 보여주고, "더 보기 데이타"를 불러오기 시작한다. 

7. 6번의 결과가 성공하면 추가적인 데이타를 목록에 보여준다. 다시 하반부에 도달하면 6번을 실행한다.

8. 6번의 결과가 실패하면 더 보기 실패 뷰를 보여준다. 

9. 8번 더보기 실패 뷰에서 재시도를 누르면 6번의 과정을 다시 시도한다. 

10. pull to refresh를 하거나, 상단의 새로고침 버튼을 누르면 1번을 다시 실행한다. 


이런 패턴이 여러 페이지에서 반복되기 때문에 이를 모아서 공통된 모듈로 분리해서 모듈화를 시킬 수 있다. 


일단 모듈화를 했을 때 어떻게 간단해지는지 모듈을 사용하는 방법을 설명한다. 


ListView 표시할 데이타 모델을 정의한다.  

number라는 정수 데이타만 가지는 간단한 테스트 모델이다.



ListView에서 한 Item을 처리할 viewHolder를 구현한다. 

inflateView를 뷰를 생성하고, bindeView로 뷰를 업데이트한다. 


ListView를 초기화한다. 

loading의 요청을 처리할 OnLoadingListener를 구현하고, adapter를 초기화한다. requestLoading으로 첫번째 데이타를 로딩을 요청한다. 



MyTask의 구현

myTask의 구현은 간단하다. simpleListController의 메쏘드를 적절히 호출해 주면 상태에 따른 view는 자동으로 변경된다.



공통 모듈의 구현 


ViewHolder

Item을 표시하는 ViewHolder는 이 클래스를 implements 해야 한다. 


MoreLoadingViewHolder

목록의 하단의 더보기 구현, adapter에서 변경가능하고, 따로 지정하지 않으면 MoreLoadingViewHolder가 기본으로 동작한다. 



SimpleListActivity

별거 없다. 뷰를 초기화하고 각 상태별로 보여줘야 할 뷰의 visible을 변경해 주면 된다. 



SimpleListAdapter

adapter는 generic으로 중복구현을 없앤다. 


SimpleListController



top

posted at

2015. 7. 23. 22:07


CONTENTS

Seize the day
BLOG main image
김대정의 앱 개발 노트와 사는 이야기
RSS 2.0Tattertools
공지
아카이브
최근 글 최근 댓글
카테고리 태그 구름사이트 링크