728x90
    
    
  반응형
    
    
    
  Adaptor View(어댑터 뷰)
먼저 Adapter(어댑터)란 데이터와 View를 연결짓는 다리 역할을 하는 객체를 말한다.
Adaptor View는 Adapter가 관리하는 데이터를 출력시켜줄 수 있는 view이다. 많은 정보들을 view에 직접 정보를 주입하여출력하지 않고, Adapter가 중간 다리 역할을 하여 관리해준다.
Adaptor View는 ViewGroup을 상속을 받아 많은 view들을 담을 수 있고 출력할 수 있게 해준다.
어댑터 뷰 예제
어댑터 뷰 구조 및 흐름
MainActivity -> List['a','b','c'] -> Adapter -> listView_item.xml -> activity_main.xml (list)
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">
    <ListView
        android:id="@+id/mainListview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>메인 xml에서 어댑터 뷰로 사용할 ListView를 선언해주고 id를 지정한다.
listview_item.xml
<?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="80dp">
    <TextView
        android:id="@+id/listviewItem"
        android:text="리스트뷰 아이템"
        android:textSize="30sp"
        android:layout_margin="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <TextView
        android:id="@+id/listviewItem2"
        android:text="리스트뷰 아이템"
        android:textSize="20sp"
        android:layout_margin="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>listview를 출력 할 textview 선언한다.
ListViewModel.kt
package com.meongj.listview_ex
import android.icu.text.CaseMap
data class ListViewModel (
    var title: String = "",
    var content : String = ""
)title과 content를 가진 model인 ListViewModel을 생성하였다.
ListViewAdaptor.kt
package com.meongj.listview_ex
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
class ListViewAdaptor(val List : MutableList<ListViewModel>) : BaseAdapter() {
    //오버라이드
    override fun getCount(): Int {
        return List.size
    }
    override fun getItem(position: Int): Any {
        return List[position]
    }
    override fun getItemId(position: Int): Long {
        return position.toLong()
    }
    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        var converView = convertView
        if (converView == null) {
            converView = LayoutInflater.from(parent?.context).inflate(R.layout.listview_item, parent, false)
        }
        val title = converView!!.findViewById<TextView>(R.id.listviewItem)
        val content = converView!!.findViewById<TextView>(R.id.listviewItem2)
        title.text = List[position].title
        content.text = List[position].content
        // List[0] => ListViewModel("a","b")
        return converView!!
    }
}
데이터와 view를 잇는 Adaptor를 생성한다. ListViewModel을 List로 전달받아 view로 전달할 title과 content를 할당해준다.
MainActivity.kt
package com.meongj.listview_ex
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ListView
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val list_item = mutableListOf<ListViewModel>()
        list_item.add(ListViewModel("title : a","content : b"))
        list_item.add(ListViewModel("title : c","content : d"))
        list_item.add(ListViewModel("title : e","content : f"))
        val listview = findViewById<ListView>(R.id.mainListview)
        //어댑터에 list전달
        val listAdaptor = ListViewAdaptor(list_item)
        listview.adapter = listAdaptor
    }
}model에 출력할 값을 넣고 adaptor에 main 화면의 ListView로 전달한다.

반응형
    
    
    
  'Android > Kotlin' 카테고리의 다른 글
| [Kotlin Basic] 코틀린 접근제한자 (0) | 2021.12.04 | 
|---|---|
| [Kotlin Basic] 함수, 매개변수, 반환 타입 (0) | 2021.11.30 | 
| [Kotlin Basic] 변수와 자료형 (0) | 2021.11.29 | 
| [Kotlin Basic] 기본 구문- print, 주석, 세미콜론(;) (0) | 2021.11.29 | 
| Kotlin 이란? (0) | 2021.11.25 |