안드로이드 5) AdapterView

밍나·2022년 1월 8일
0

Android

목록 보기
5/36

Concepts of AdapterView

1. AdapterView

  • 항목을 나열하고 그 중 하나를 유저에게 선택 받고자 하는 뷰
  • 종류
    • ListView, AutoCompleteTextView, Spinner 등
    • Adapter에 의해 항목이 만들어지는 뷰
  • 이전의 Button, TextView 등의 경우는 해당 뷰 만으로 화면을 구성할 수 있었지만 AdapterView는 뷰 자체만 가지고는 화면을 구성할 수 없고 항목을 구성해주는 Adapter가 있어야 한다

  • Activity에서 Adapter에 명령을 내리고(이 때 Activity에서 Adapter에게 항목 하나에 대한 layout xml과 항목을 구성하기 위한 data에 대한 정보를 넘겨주어야 한다), Adapter는 이 명령을 받아들여 AdapterView를 구성한다. 이렇게 해서 AdapterView가 화면에 출력된다.

ArrayAdapter

1. ArrayAdapter

  • 안드로이드 플랫폼에서 제공하는 어댑터 중 하나로 항목에 문자열 데이터를 순서대로 하나씩 나열하는 경우 이용
  • 사용 방법

1) ListView 준비 : ListView만으로는 아무것도 안나옴

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

2) Adapter 적용

// adapter에게 항목 하나의 UI 구성과 항목에 대한 data를 줌
val adapter = ArrayAdater(this, android.R.layout.simple_list_item_1, datas)
listView.adapter = adapter
  • 안드로이드 제공 기본 adapter layout
    • simple_list_item_1 : 항목에 문자열 데이터 하나
    • simple_list_item_2 : 항목에 문자열 데이터 두개 위아래 나열
    • simple_list_item_multiple_choice : 문자열과 오른쪽 체크박스 제공
    • simple_list_single_choice : 문자열과 오른쪽 라디오 버튼 제공
  • 이 외에 따로 Custom Layout을 적용해도 된다

SimpleAdapter

1. SimpleAdapter

  • 안드로이드 플랫폼에서 제공하는 어댑터 중 하나로 항목에 문자열 데이터를 여러 개 순서대로 하나씩 나열하는 경우 이용
val datas: ArrayList<HashMap<String?, String?>> = ArrayList()
// Map 객체는 key 값이 있어야 데이터를 뽑을 수 있기 때문에
// 4번째 매개변수에서 key 값을 알려줌
// 5번째 매개변수는 각 key 값에 해당하는 데이터가 출력될 view의 id
val adapter = ArrayAdater(
	this,
    	datas,
    	android.R.layout.simple_list_item_2, 
	arrayOf("name", "content"),
	intArrayOf(android.R.id.text1, android.R.id.text2))
    
listView.adapter = adapter

ListView

1. ListView

  • 이미 출력되어 있는 리스트뷰에 항목을 추가하거나 제거할 때
adapter.notifyDataSetChanged()
  • 항목 선택 이벤트 : 리스트뷰에서 유저가 항목을 하나 선택할 때
listView.setOnclickListener { adapterView, view, i, l ->
	// 세번째 매개변수인 i가 유저가 선택한 인덱스 값
	...
}

CustomAdpater

1. CustomAdpater, 조금 더 공부하고 글 추가하기

  • 개발자가 어댑터를 직접 만드는 것
    • 개발자 알고리즘 대로 항목의 데이터가 설정되어야 하는 경우
    • 개발자 알고리즘 대로 항목별 View의 이벤트를 다르게 처리해야 하는 경우
    • 개발자 알고리즘 대로 항목별 Layout을 다르게 적용시켜야 하는 경우
  • 만드는 방법

1) BaseAdapter 혹은 ArrayAdapter, SimpleAdapter를 상속 받아 작성

class DriveAdapter(val cxt: Context, val resId: Int, val datas: MutableList<DriveVO>):ArrayAdapter<DriveVO>(cxt, resId) {

}

2) Adapter에서 override 받아야 하는 함수 작성(getCount() - 항목 개수 리턴)

override fun getcount(): Int {
	return datas.size
}

3) Adapter에서 override 받아야 하는 함수 작성(getView() - 항목 구성)

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
	// 하나의 항목을 구성하기 위해 call하는 함수, 첫번째 매개변수가 항목의 위치
    	// 여기서 리턴되는 것이 뷰에 출력 되는 것임
    	// 한 항목의 data를 어떻게 나열할 건지, 한 항목을 구성하기 위한 뷰에 이벤트를 어떻게 할지, 한 항목을 위한 레이아웃을 어떻게 조정할 건지
}

Spinner, AutoCompleteTextView

1. Spinner

  • 여러 항목 중 하나를 선택하는 뷰
<Spinner
	android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
  • Spinner만 입력하면 화면에 아무것도 안 나옴, Adapter가 적용이 되어야 함
  • dropdown layout이 simple_spinner_item과 simple_spinner_dropdown_item 제공
val aa: ArrayAdapter<String> =
	ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, datas)
aa.setDropDownViewResource(android.R.layout.simple_spinner_item)
spinner.adapter=aa
  • xml에서 spinnerMode=:"dialog"로 지정시 다이얼로그 형태로 제공 가능

2. AutoCompleteTextView

  • 유저에게 글을 입력 받기 위한 뷰
  • 추천 단어를 보여주는 뷰
<AutoCompleteTextView
	android:id="@+id/auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
  • adapter는 ArrayAdapter로 구현하면 됨
val autoAdapter: ArrayAdapter<String> =
	ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, datas)
autoCompleteTextView.setAdapter(autoAdapter)
  • AutoCompleteTextView 속성
    • android:completionThreshold="1" : 자동완성을 위한 dropdown이 한글자 입력되었을 때 보이게 된다. 기본은 두글자
    • android:completionHint="항목을 선택하세요" : dropdown 아래에 설명 글
    • android:dropDownWidth="200dp" : dropdown의 가로 사이즈
    • android:dropDownHeight="100dp" : dropdown의 세로 사이즈
    • android:dropDownVerticalOffset="100dp" : dropdown과 AutoCompleteTextView 세로방향과 offset 사이즈
    • android:dropDownHorizontalOffset="100dp" : dropdown과 AutoCompleteTextView 가로방향과 offset 사이즈
profile
🤗🤗🤗

0개의 댓글