안드로이드 리스트뷰(Android Listview) 기초



읽기 전에 손가락 한번 꾸~욱 _(__)_ ♥

감사합니다.^^ ☞ ☜

리스트뷰는 수직으로 데이터를 보여줄때 주로 사용됩니다.

전화번호목록, 최신통화목록, 수신메세지 목록등 많은 양의 데이터를 수직으로 보여줄때 유용하게 사용이 됩니다.

리스트뷰를 사용하기 위해서는 3가지가 필요합니다.


- 뷰 - 실제로 화면에 보여주는 녀석

- 어댑터 - 뷰와 데이터 사이의 중간 매개체 역활

- 데이터 - 보여줄 실제 데이터


예를들어 친구 전화번호를 리스트뷰로 나타낸다 라고 생각해 보겠습니다.

- 친구들 전화번호 - 데이터

- 화면에 보여줄 뷰 --> 리스트뷰

- 데이터와 뷰를 중간에서 컨트롤하는 어댑터


어댑터가 데이터한테 요청 합니다.

" 어이! 데이터 너 머 보여줄꺼야? 보여주고 싶은거 배열이나 리스트에 담아서 나한테 줘! "


어댑터는 리스트한테 요청합니다.

" 어이! 리스트뷰 네가 보여줘야할 데이터가 있는데 이 배열(리스트)를 한줄에 하나씩 보여줘! "


그러면 리스트뷰는 어댑터가 넘겨준 데이터(배열또는 리스트로 넘어온 전화번호들)를 

알려준 모양대로(한줄에 하나씩) 화면에 출력합니다.


대충 이해가 가시나요?

그럼 먼저 간단한 예제를 가지고 다시 한번 살펴보겠습니다.


main.xml

더보기


ListViewTestActivity .java

더보기


코드 살펴보기

ArrayList<String> dataArr = new ArrayList<String>();
이 녀석이 데이터 부분입니다. 4개의 문자열을 가지고 있네요.


ListView list
list = (ListView)findViewById(R.id.listView);
이 부분이 뷰 영역 입니다. 실제로 화면에 보여주는 역활을 하죠.


ArrayAdapter<String> Adapter = new ArrayAdapter<String>  (this, android.R.layout.simple_list_item_1, dataArr);
이 부분이 어댑터 부분입니다. 리스트뷰와 데이터를 중간에서 연결 및 관리해 주는 녀석이죠. 
주의 해서 봐야 할것은 생성자의 매개변수 입니다.
첫번째는 Context를 받는거니 넘어가구요. 두번째를 보시면 이상한 녀석이 있습니다.

android.R.layout.simple_list_item_1 이녀석이죠. 
우리가 res/layout 폴더안에 aaa.xml 파일을 만들면 자바코드에서 R.layout.aaa 형태로 사용이 가능합니다. 마찬가지로 이미 안드로이드 sdk안에 만들어진 몇개의 xml 파일들이 있습니다. 그 녀석들을 사용할때 android.R.xxx 형태로 쓰는것이죠.
즉 위에서 사용된 android.R.layout.simple_list_item_1 이 부분은 " 안드로이드가 미리 만들어 놓은 레이아웃 중에 simple_list_item_1.xml 파일을 읽어와라" 라는 뜻이 됩니다.  그외 ListView에서 사용되는 기본 레이아웃 입니다.

 미리 정의된 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 

 항목 여러개를 선택할 수 있다.