다오__ 2025. 3. 4. 14:36

AdapterView

- 데이터를 적재해서 큰 틀에다 놓고 화면에 출력하는 방법이다.

 

리스트뷰는 어뎁터를 통해 데이터를 뿌려주는 형식의 뷰입니다.

 

데이터 영역에서 어뎁터에 적재(setAdapter())한다. 이를 레이아웃에 리스트 형식(ListView)으로 화면에 출력한다.

ListView 뿐 아니라 GridView, Spinner, Gallery 같이 다양한 방법이 있다.

 

다양한 종류의 어댑터들

어댑터는 ArrayList나 DB에서 데이터를 수집하고, 레이아웃을 표현하는 XML코드를 해석해 AdapterView의 화면을 구성한다.

AdapterView로는 ListView, Spiiner 등이 있다.

 

어댑터

- 화면에 표시되는 AdapterView를 위해 화면에 표현되는 "데이터를 관리" 하는 역할을 한다.

- Adapter는 전달받은 데이터의 유형에 따라 다양한 자식 View로 세분화된다.

 

AdaterView : 화면에 뿌려주는 역할

Adapter : AdapterView에 필요한 데이터들을 관리

 

초기화 방법

//생성자

ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
ArrayAdapter(Context context, int textViewResourceId, T[] objects)

 

context : AdapterView를 출력할 액티비티의 콘텍스트(this)

   ArraysAdapter를 생성한 주체 액티비티

textViewResourceId : 아이템을 표현하는 방법을 결정하는 레이아웃(리소스 ID)

 

 

objects : Adapter에 입력으로 전달되는 데이터 객체

Adapter = new ArrayAdapter<String>(this, adnroid.R.layout.simple_list_item_checked, arGeneral);

 

ListView

- 여러개의 항목들을 수직으로 표시하는 위젯

- 다수의 항목을 출력해야 하는 경우

- 수직 스크롤 지원, 표시되는 항목의 개수에는 제한이 없음

- 위아래로 스크롤 할 수 있는 기능

- 아이템은 ListView에서 하나의 행을 구성하는 항목으로 레이아웃을 통해 다양한 형태로 구성 할 수 있음.

 

XML에서 ListView를 생성하고, JAVA 코드로 Adapter를 선언해 데이터를 적재하고, 이를 연결시켜준다.

list.setAdapter(adapter)

 

리소스에서 데이터를 참조

- 고정적인 문자열이라면 컬렌션이나 배열보다는, XML 코드에 정의해 놓고 사용하는것이 바람직하다.

- 배열을 리소스에 정의하기 위해 패키지탐색기의 values 폴더에 arrays.xml을 작성하여 문자열들을 리소스로 R.java에 등록할 수 있다.

//arrays.xml
...
<resources>
	<string-array name="mobile">
    	<item>Application</item>
        <item>Activity</item>
        <item>Intent</item>
    <string-array>
</resources>

 

문자열을 XML에서 선언하고 접근할 수 있는 기능을 지원하는 string-array 엘리먼트를 사용하여 작성한다.

- name 속성에 배열 리소스의 이름을 지정하고, item 엘리먼트로 배열 요소값을 정의한다.

//MainActivity.java
//ListView에 부착하기

public class MainActivity extends Activity {
	protected void onCreate(bundle savedInstanceState) {
    ...
    ArrayAdatater<CharSequence> Adapter;
    Adapter = ArrayAdapter.createFromResource(this, R.array.mobie, android.R.layout.simple_list_item_1);
    ListView list = (ListView)findViewById(R.id.list);
    list.setAdapter(Adapter);
    }
}

 

ListView 속성

- choiceMode

  - ListView 내의 View를 선택하는 형식을 정의

none CHOICE_MODE_NONE 항목 선택 X
singChoice CHOICE_MODE_SINGLE 하나의 항목 선택
multipleChoice CHOICE_MODE_MULTIPLE 복수 개의 항목 선택

 

- divider

  - 항목 사이의 구분선을 지정하는 속성

  - setDivider 메서드를 사용하여 Drawable 객체를 인수로 전달하고, dividerHeight 속성으로 두께를 지정

  - setChoiceMode 등

 

 

Spinner

- ListView는 항상 펼쳐져있지만 Spinner는 클릭할 때만 팝업 형식으로 펼쳐진다.

- Spiiner의 경우에는 여러 개의 항목 중에서 하나를 선택할 때 사용되며, 화면의 공간에 제약이 있는 스마트폰이나 패드형 컴퓨터에서 적합하다.

- 목록을 보려면 팝업을 열고, 최종 선택을 위해 최소 두 번 클릭해야한다.

- Spinner 또한 Adpater로 부터 데이터를 제공받는다.

 

화면에 표시하는 기본 레이아웃

simple_spinner_item : 문자열

simple_spinner_dropdown_item : 문자열과 라디오 버튼이 같이 나타남

 

setDropDownViewResource 메서드

- Spinner 자체에 적용할 레이아웃과는 별도로 클릭했을 때 나타나는 팝업의 레이아웃을 지정하는 메서드이다.

public void setDropDwonViewResource(int resource)

 

- 매개변수로는 단순한 형태의 메뉴 모양인 simple_spinner_item 또는 음영이 적용된 드롭 다운 메뉴 모양인

simple_spinner_dropdown_item 중 하나를 지정

 

Prompt 메시지

- Spinner에서는 선택 사항에 대한 Prompt 메시지를 팝업 상단에 표시 할 수 있다는 점도 ListView와 다른점이다.

- Prompt 메시지의 내용은 리소스의 문자열 ID를 지정할 수 있고, 직접 문자열을 지정할 수도 있다.

- Spinner의 팝업 레이아웃에서 item의 선택을 변경하면, AdapterView.OnItemSelectedListener 인터페이스의 두 메서드가 다음과 같이 호출된다.

void onItemSelected(AdapterView<?> parent, View view, int position, long id)  //항목 선택 시
void onNothingSelected(AdpaterView<?> parent)  // 모든 항목이 선택 해제될 시