본문 바로가기
프로그래밍/Android

Adapter 와 AdapterView

by Mr-후 2018. 10. 22.
반응형


AdapterView의 역할은 항목을 나열하는 뷰이다. 하나의 뷰에 여러 데이터를 나열하고 그 중 하나를 사용자로부터 선택 받아 다음 프로세스가 처리되는 뷰이다. 

AdapterView의 구조는 최상위 View를 기준으로                 

ListView

← AbsListView     

← GridView

View ← ViewGroup ← AdapterView 

← AbsSpinner    ← Spinner 

상속 관계를 가지고 있다. 


AdapterView 자체로는 화면에 아무것도 나오지 않으며 화면에 나타내려면 반드시 Adapter라는 클래스를 이용해야 한다. Adapter클래스는 뷰는 아니지만 AdapterView를 만들어주는 클래스 역할을 한다. 또한 안드로이드에서 화면 출력을 위해 액티비티가 실행되어야 한다. 

결국 AdapterView를 이용하기 위해서는 Adapter 클래스와 Activity를 활용해야 한다. 라이브러리에서 제공되는 ArrayAdapter, SimpleAdapter, CursorAdapter가 제공된다. 


1) ArrayAdapter 

각 항목에 문자열 데이터를 순서대로 하나씩 나열할 때 사용하면 된다. 

new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dataList); 

- this : Context 객체 

- android.R.layout.simple_list_item_1 : 항목 하나를 구성하기 위한 레이아웃 XML 파일 정보 

- dataList : 항목을 구성하는 데이터 

생성된 Adapter는 ListView의 setAdapter() 를 이용해서 dataList가 ListView에 나오도록 할 수 있다. 


ListView가 사용할 수 있는 라이브러리 XML 파일 유형. 

- simple_list_item_1 : 항목에 문자열 데이터 하나 

- simple_list_item_2 : 항목에 문자열 데이터 두 개 위아래 나열 

- simple_list_item_multiple_choice : 문자열과 오른쪽 체크박스 제공 

- simple_list_item_single_choice : 문자열과 오른쪽 라디오버튼 제공 

이상의 라이브러리 XML외에 사용자 정의XML을 만들어서 사용할 수 있다.  이때 직접 만든 레이아웃 XML을 이용할 때는 ArrayAdapter에게 데이터를 출력할 TextView가 어떤 뷰인지 id  값을 전달해야 한다. 

new ArrayAdapter<String>(this, R.layout.main_item, R.id.main_item_name, dataList); 

listView.setAdapter(adapter); 


항목을 나열하는 성격의 뷰는 대부분 각 항목을 사용자가 클릭했을 때의 이벤트를 처리하기 위해  OnItemClickListener와 OnItemLongClickListener 인터페이스를 제공한다. 


ListView에 Adapter로 항목을 나열한 다음 항목 동적으로 추가 또는 제거되는 경우가 있는데 Adapte에게 전달한 항목 집합 객체에 데이터만 추가, 제거 후 반영하면 된다. 이럴 때 notifyDataSetChanged() 함수를 이용한다. 


2) SimpleAdapter 

ArrayAdapter와 달리 문자열 데이터를 여러개 나열해야하는 경우 사용. (두줄) 

SimpleAdapter의 생성자 함수는 총 5개의 매개변수를 가진다. 

- this : Context

- dataList :  항목을 구성하는 데이터

- android_R.layout.simple_list_item_2 : 한 항목을 위한 레이아웃 XML 

- new String[]{"name", "content"} : 한 항목의 데이터를 가지는 HashMap에서 데이터를 추출하기 위한 키 값 

- new int[]{android.R.id.text1, android.R.id.text2} : 추출된 데이터를 화면에 출력하기 위한 레이아웃 파일 냉의 뷰 id 값 


3) CursorAdapter 

안드로이드 DBMS 프로그램의 select 결과값을 그대로 이용해 항목을 구성한다. 안드로이드DBMS의 select 결과 객체가 Cursor이고, 원래는 직접 행의 칼럼 데이터를 추출해서 사용해야 하나 Cursor객체를 CursorAdapter에게 넘겨주면 알아서 행의 칼럼 데이터를 추출해서 정의된 규칙대로 항목을 구성해준다. 

CursorAdapter의 생성자 함수가 가지는 매개변수 

- this : context 객체 

- android.R.layout.simple_list_item_2, cursor: 항목 구성 레이아웃 XML 

- new String[]{"name", "content"} : 데이터 추출 시 이용할 컬럼명 

- new int[]{android.R.id.text1, android.R.id.text2} : 레이아웃 XML의 데이터가 출력될 뷰의 id값

- CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER: 플래그 

출처 : -깡샘의 안드로이드 프로그래밍- 중에서 


반응형