본문 바로가기

프로그래밍/안드로이드

[안드로이드/Android] 안드로이드 리스트뷰 기초

안드로이드 리스트뷰(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 

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