Adapter란 데이터와 View를 연결짓는 다리 역할을 하는 객체를 말한다.
Adapter View는 Adapter 가 관리하는 데이터를 출력시켜줄 수 있는 view 이다. 많은 정보들을 view에 직접 정보를 주입하여 출력하지 않고, Adapter가 중간 다리 역할을 하여 관리해주는 것
어댑터가 데이터를 가공해서 제공하면 어댑터 뷰는 그 데이터를 출력하는 역할을 한다.
많은 정보를 효율적으로 처리하기 위해서 View에 바로 데이터를 제공하지 않고 어댑터 객체를 이용한다.

Adapter 가 중간 다리 역할을 하여 관리해준다
Adapter View 는 ViewGroup 을 상속 받아 많은 view들을 담을 수 있고 출력할 수 있게 해준다.
항목을 나열하고 그 중 하나를 선택하고 싶을 때 사용하는 뷰
ListView,Spinner,AutoCompleteTextView 등
Adapter에 의해 항목이 만들어 지는 뷰
MainActivity -> List['a','b','c'] -> Adapter -> listView_item.xml -> activity_main.xml(list)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="job">
<item>의사</item>
<item>변호사</item>
<item>판사</item>
<item>교사</item>
<item>개발자</item>
</string-array>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
</ListView>

package com.example.tutorial
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val listView = findViewById<ListView>(R.id.main_list)
val data = resources.getStringArray(R.array.job)
val adapter = ArrayAdapter(
this,
android.R.layout.simple_list_item_1,
data
)
listView.adapter = adapter
}
}
findViewByld(R.id.main_list)를 사용하여 activity_main.xml 에서 ListView의 참조를 가져옴
resources.getStringArray(R.array.job) 를 사용하여 문자열 배열 리소스인 job을 가져옴
ArrayAdapter 클래스를 사용해서 ListView와 데이터 연결.
ListView 에 어댑터를 설정하여 데이터를 화면에 표시함
한 항목에 문자열 데이터 여러 개를 나열하고 싶은 경우에 사용한다
안드로이드에서 제공하는 어댑터 중 하나임
SimpleAdapter 는 이름 그대로 간단한 데이터 구조를 ListView에 표시하는 데 사용된다.
주로 각 항목이 하나 이상의 TextView로 구성된 간단한 리스트를 표시하는 데 사용됨.
각 항목은 Hashmap 또는 배열로 표현됨
activity_simple_adapter.xml
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/simple_Listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
</ListView>
SimpleAdapterActivity.kt
package com.example.tutorial
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ListView
import android.widget.SimpleAdapter
class SimpleAdapterActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_simple_adapter)
val listView = findViewById<ListView>(R.id.simple_Listview)
val data: ArrayList<HashMap<String,String>> = ArrayList()
var map : HashMap<String,String> = HashMap()
map["제품명"] = "신라면"
map["맵기 정도"] = "5단계"
data.add(map)
map = HashMap()
map["제품명"] = "불닭 볶음면"
map["맵기 정도"] = "9단계"
data.add(map)
map = HashMap()
map["제품명"] = "안성탕면"
map["맵기 정도"] = "1단계"
data.add(map)
val adapter = SimpleAdapter(
this,
data,
android.R.layout.simple_list_item_2,
arrayOf("제품명", "맵기 정도"),
intArrayOf(android.R.id.text1, android.R.id.text2)
)
listView.adapter = adapter
}
}

findViewById(R.id.simple_Listview) 사용하여 xml 레이아웃 파일에서 리스트뷰 참조
데이터를 저장하기 위한 ArrayList가 생성됨
각 제품에 대한 HashMap 을 생성하고 데이터를 채운 후, ArrayList에 추가함
SimpleAdapter 를 사용하여 ListView와 데이터를 연결함. 이 때, 각 항목의 레이아웃은 android.R.layout.simple_list_item_2로 설정되며, android.R.layout.simple_list_item_2 는 안드로이드 프레임 워크에서 기본적으로 제공하는 간단한 리스트 아이템 레이아웃이다. 이 레이아웃은 각 항목이 두 개의 TextView 로 구성되어 있음.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold" />
<TextView
android:id="@android:id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:textColor="?android:attr/textColorSecondary" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context=".ListView_Add_DeleteActivity">
<ListView
android:id="@+id/main_list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:orientation="horizontal">
<EditText
android:id="@+id/edit"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:inputType="text"/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="add"/>
</LinearLayout>
</LinearLayout>
package com.example.tutorial
import android.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.EditText
import android.widget.ListView
class ListView_Add_DeleteActivity : AppCompatActivity() {
var todo = mutableListOf<String>()
lateinit var adapter: ArrayAdapter<String>
lateinit var listView: ListView
lateinit var editText: EditText
lateinit var button: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_list_view_add_delete)
listView = findViewById(R.id.main_list)
editText = findViewById(R.id.edit)
button = findViewById(R.id.button)
adapter = ArrayAdapter(
this,
android.R.layout.simple_list_item_1,
todo
)
listView.adapter = adapter
// 리스트뷰의 항목을 클릭하면 항목 제거 여부를 묻는 다이얼로그 띄우기
listView.setOnItemClickListener { adpaterView, view, i, l ->
AlertDialog.Builder(this)
.setTitle("Remove TODO")
.setPositiveButton("OK") { dialog, which ->
todo.removeAt(i)
adapter.notifyDataSetChanged()
}
.setNegativeButton("CANCEL", null)
.create()
.show()
}
// add 버튼 누르면 리스트뷰에 항목 추가
button.setOnClickListener {
todo.add(editText.text.toString())
editText.text.clear()
adapter.notifyDataSetChanged()
}
}
}

todo 라는 이름의 가변 리스트 선언 사용자가 입력하는 할 일 목록을 저장하는 역할을 한다.
adapter 라는 이름의 ArrayAdapter 를 선언함 리스트뷰와 데이터를 연결하는 역할 데이터 타입은 String
ArrayAdapter 를 초기화 한다. this 는 현재 액티비티를 나타내고, 두 번째 매개변수인 'android.R.layout.simple_list_item_1' 은 각 리스트뷰 항목에 사용될 레이아웃 리소스임 t세 번째 매개변수인 'todo'는 리스트뷰에 표시 될 데이터임 이 데이터는 앞서 선언한 'todo' 리스트임
리스트뷰에 어댑터를 설정함
listView.setOnItemClickListener { adpaterView, view, i, l ->
AlertDialog.Builder(this)
.setTitle("Remove TODO")
.setPositiveButton("OK") { dialog, which ->
todo.removeAt(i)
adapter.notifyDataSetChanged()
}
.setNegativeButton("CANCEL", null)
.create()
.show()
}
'listView.setOnItemClickListener { adpaterView, view, i, l -> ... }' 는 리스트뷰의 각 항목을 클릭했을 때 발생하는 이벤트를 설정한다.
'AlertDialog.Builder(this)' 는 다이얼로그를 생성하기 위한 빌더 객체를 생성하기 위한 코드이다. this는 현재 액티비티를 나타내는 것.
.setTitle("Remove TODO" 는 다이얼로그의 제목을 설정함
setPositiveButton (OK) 는 다이얼로그에 OK 버튼을 추가하고 클릭했을 때 실행될 동작을 정의한다. 클릭 시 해당 데이터를 삭제하고, 어댑터에 변경 사항을 알려 리스트 뷰를 갱신함.
todo.removeAt(i) : 클릭한 항목의 위치 i에 해당하는 할 일을 목록에서 삭제한다.
setNegativeButton("CANCEL",null) : 다이얼로그에 "CANCEL" 버튼을 추가하고 해당 버튼을 클릭하면 아무런 동작이 수행되지 않음
.create().show(): AlertDialog를 생성하고 화면에 표시한다.
// add 버튼 누르면 리스트뷰에 항목 추가
button.setOnClickListener {
todo.add(editText.text.toString())
editText.text.clear()
adapter.notifyDataSetChanged()
button.setOnClickListener { ... }: "add" 버튼이 클릭되었을 때 실행될 동작을 설정한다, todo.add(editText.text.toString()): 사용자가 입력한 텍스트를 EditText에서 가져와서 todo 리스트에 추가한다. editText.text.toString()을 사용하여 EditText에 입력된 문자열을 가져옵니다.
editText.text.clear(): 항목을 추가한 후에는 EditText를 비워줍니다. 이렇게 하면 사용자가 새로운 항목을 입력할 수 있습니다.
마찬가지로 어댑터에게 데이터가 변경되었음을 알려준다.