안드로이드 리스트뷰(Android Listview) 기초
리스트뷰는 수직으로 데이터를 보여줄때 주로 사용됩니다.
전화번호목록, 최신통화목록, 수신메세지 목록등 많은 양의 데이터를 수직으로 보여줄때 유용하게 사용이 됩니다.
리스트뷰를 사용하기 위해서는 3가지가 필요합니다.
- 뷰 - 실제로 화면에 보여주는 녀석
- 어댑터 - 뷰와 데이터 사이의 중간 매개체 역활
- 데이터 - 보여줄 실제 데이터
예를들어 친구 전화번호를 리스트뷰로 나타낸다 라고 생각해 보겠습니다.
- 친구들 전화번호 - 데이터
- 화면에 보여줄 뷰 --> 리스트뷰
- 데이터와 뷰를 중간에서 컨트롤하는 어댑터
어댑터가 데이터한테 요청 합니다.
" 어이! 데이터 너 머 보여줄꺼야? 보여주고 싶은거 배열이나 리스트에 담아서 나한테 줘! "
어댑터는 리스트한테 요청합니다.
" 어이! 리스트뷰 네가 보여줘야할 데이터가 있는데 이 배열(리스트)를 한줄에 하나씩 보여줘! "
그러면 리스트뷰는 어댑터가 넘겨준 데이터(배열또는 리스트로 넘어온 전화번호들)를
알려준 모양대로(한줄에 하나씩) 화면에 출력합니다.
대충 이해가 가시나요?
그럼 먼저 간단한 예제를 가지고 다시 한번 살펴보겠습니다.
main.xml
ListViewTestActivity .java
미리 정의된 xml 파일 |
설명 |
simple_list_item_1 |
텍스트뷰 하나로 구성된 레이아웃 |
simple_list_item_ |
텍스트뷰 두개로 구성된 레이아웃 |
simple_list_item_checked |
오른쪽에 체크 표시가 됨 |
simple_list_item_single_choice |
오른쪽에 라디오 버튼이 나옴 |
simple_list_item_multiple_choice | 오른쪽에 체크버튼이 나옴 |
위의 예제에서는 데이터 부분을 Java 코드상의 ArrayList를 사용하였지만 xml로도 선언 가능합니다.
/res/values/arrays.xml
<?xml version=“1.0” encoding=“utf-8”?>
<resources>
<string-array name=“listitems”>
<item>Java</item>
<item>Jsp</item>
<item>Ejb</item>
<item>Android</item>
<item>자바</item>
<item>안드로이드</item>
<item>스프링</item>
<item>스트럿츠</item>
</string-array>
</resources>
코드수정
ArrayList<String> dataArr = new ArrayList<String>();
dataArr.add("JAVA");
dataArr.add("JSP");
dataArr.add("EJB");
dataArr.add("ANDROID");
ArrayAdapter<String> Adapter = new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1, dataArr);
위의 부분을 아래와 같이 수정합니다.
ArrayAdapter<CharSequence> Adapter =
ArrayAdapter.createFromResource(this, R.array.country, android.R.layout.simple_list_item_1);
특별히 달라지는건 없지만 자바코드의 양이 줄었죠?
그럼 어떠한 상황에서 이리 쓰느냐?
데이터가 수시로 추가되고 삭제되고 변경이 자주 생긴다. --> 자바코드에서 데이터를 만드세요.
데이터의 변경 없이 일정하다 --> xml상에 데이터를 만드세요.
그럼 편하답니다.
마지막으로 ListView의 속성을 살펴보도록 하겠습니다.
굉장히 많이 있지만 대표적으로 많이 쓰는 녀석들만 알아 보겠습니다.
1. android:divider
- 항목 사이사이의 구분선을 설정합니다. RGB로 색상을 지정하거나 Drawable로 설정가능합니다.
2. android:dividerHeight
- 구분선의 높이를 설정합니다.
3. android:entries
- 리스트뷰에 표시할 배열을 지정합니다. static 배열이라면 이녀석으로 사용이 가능합니다.
4. android:footerDividersEnabled
- 만약에 false로 설정을 하면 리스트뷰의 바닥뷰(footer View)를 보기 전까지 구분선을 그리지 않습니다. 기본값은 true 입니다.
5. android:headerDividersEnabled
- 만약에 false로 설정을 하면 리스트뷰의 헤더뷰(header view)를 본 후에 구분선을 그리지 않습니다. 기본값은 true 입니다.
6. android:choiceMode
- 항목 선택 모드를 결정합니다. 아래의 모드를 통해 1개 또는 여러개의 선택이 가능합니다.
속성값(xml에서 사용) |
Java파일에서 사용할때 변수값 |
설명 |
none |
CHOICE_MODE_NONE |
항목 선택이 불가능하다. |
singleChoice |
CHOICE_MODE_SINGLE |
항목 하나를 선택할 수 있다. |
multipleChoice |
CHOICE_MODE_MULTIPLE |
항목 여러개를 선택할 수 있다. |
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[안드로이드/Android] 안드로이드 스피너 (10) | 2012.06.10 |
---|---|
[안드로이드/Android] 안드로이드 그리드뷰 (26) | 2012.06.09 |
[안드로이드/Android] 안드로이드 리스트뷰 커스텀 어댑터뷰 (11) | 2012.06.05 |
[안드로이드/Android] 안드로이드 리스트뷰 추가 삭제 기능 추가하기 (17) | 2012.06.03 |
[안드로이드/Android] 안드로이드 리스트뷰 이미지버튼 이벤트 (12) | 2012.05.24 |
[안드로이드/Android] 안드로이드 메뉴(Menu) (4) | 2012.05.22 |
[안드로이드/Android] 안드로이드 이벤트 구현하기 4 (12) | 2012.05.22 |
[안드로이드/Android] 안드로이드 이벤트 구현하기 3 (0) | 2012.05.22 |
[안드로이드/Android] 안드로이드 이벤트 구현하기 2 (0) | 2012.05.22 |