ListView는 사용자가 정의한 데이터 목록을 아이템 단위로 구성하여 화면에 출력하는 ViewGroup의 한 종류다.
즉, ListView 는 어댑터(Adapter)를 통해 데이터를 뿌려주는 형식의 View 다.
ListView는 항목들을 수직으로 보여주는 어댑터 뷰로 상하로 스크롤이 가능하다.
ListView에 표시되는 아이템은 단순히 Text만 출력하는 구조가 될 수 있고, Image, Button, CheckBox 등 여러 View의 조합으로 구성되는 좀 더 복잡한 형태(Custom)가 될 수도 있다.
가장 간단하게 텍스트만 보여주는 예제를 살펴보자.
번호 1, 번호2, 번호 3과의 관계가 어떻게 되는지 아래 코드에서 보면된다.
3번 화면에 출력할 ListView 추가 (activity_main.xml)
|
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent">
<ListView android:id="@+id/istview_01" android:layout_width="match_parent" android:layout_height="match_parent" />
</RelativeLayout> |
1번 배열 리스트 생성 및 2번 어댑터 생성, ListView에 어댑터 연결
|
public class MainActivity extends AppCompatActivity {
ArrayList<String> arrayList = null; ArrayAdapter<String> adapter = null; ListView listView = null;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
// 데이터 배열 리스트 생성 arrayList = new ArrayList<String>(); arrayList.add("이순신"); arrayList.add("홍길동"); arrayList.add("유관순"); arrayList.add("강감찬"); arrayList.add("김유신"); arrayList.add("강길덕");
// 어댑터 생성 (안드로이드에서 기본 제공하는 어댑터 활용) adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arrayList);
// AdapterView listView = (ListView) findViewById(R.id.istview_01); listView.setAdapter(adapter); // ListView 에 어댑터 설정 } }
|
이렇게 데이터 배열 리스트를 생성하는 경우는 없지만 개념으로 알아두자.
ArrayAdapter(Context context, int textViewResourceID, 배열);
- context : 현재 어플리케이션 컨텍스트
- int textViewResourceID : 레이아웃 아이디
ArrayAdapter 클래스는 제네릭 클래스로 정의되어 있다.
android.R.layout.simple_list_item_1 은 안드로이드 시스템 내부에 미리 만들어진 리소스중 하나로 SDK를 설치하면 자동으로 설치되며 어떠한 추가 작업 없이 개발자가 바로 사용할 수 있다.
android.R.layout.simple_list_item_1 |
하나의 텍스트 뷰 사용
|
android.R.layout.simple_list_item_checked |
항목당 체크 표시
|
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE) |
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE) |
이제 데이터 리스트 배열을 만드는 방법을 바꿔보자.
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="contact"> <item>김유신 010-0001-00001</item> <item>강감찬 010-0001-00002</item> <item>이순신 010-0001-00003</item> <item>유관순 010-0001-00004</item> <item>홍길동 010-0001-00005</item> <item>사임당 010-0001-00006</item> <item>최영 010-0001-00007</item> <item>이성계 010-0001-00008</item> <item>이방원 010-0001-00009</item> <item>정몽주 010-0001-00010</item> <item>김태성 010-0001-00011</item> <item>강길덕 010-0001-00012</item> </string-array> </resources>
|
public class MainActivity extends AppCompatActivity {
ArrayAdapter<CharSequence> adapter = null; ListView listView = null;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
adapter = ArrayAdapter.createFromResource( this,R.array.contact,android.R.layout.simple_list_item_checked);
listView = (ListView) findViewById(R.id.listview_01);
listView.setAdapter(adapter); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); ColorDrawable colorDrawable = new ColorDrawable(Color.RED); listView.setDivider(colorDrawable); listView.setDividerHeight(3); } }
|