728x90
전반적인 리스트뷰 동작 화면 📺
(연결 1) MainActivity에서 Adapter로 데이터를 보냅니다.
(연결 2) Adapter에서 item에 각각 데이터를 넣어 activity_main에 있는 Listview에 보냅니다.
참고로 이 예제에서는 string 데이터 2개로 구성된 datamodel를 사용할 겁니다.
1
Adapter 만들기 🎄
ListViewAdapter.kt
package com.sanadoing.listview_ex
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
// 리스트 데이터를 받습니다.
class ListViewAdapter(val List: MutableList<ListViewModel>) : BaseAdapter() {
override fun getCount(): Int {
return List.size
}
override fun getItem(p0: Int): Any {
return List[p0]
}
override fun getItemId(p0: Int): Long {
return p0.toLong()
}
override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
// item을 만든 후 작성
}
}
2
item(listview_item.xml) 만들기 🎄
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:textSize="30sp"
android:layout_margin="5dp"
android:text="리스트뷰 아이템"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/listviewItem2"
android:textSize="20sp"
android:layout_margin="5dp"
android:text="리스트뷰 아이템2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
3
listview(activity_main.xml) 만들기 🎄
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"/>
</androidx.constraintlayout.widget.ConstraintLayout>
4
데이터 모델 만들기 🎄
ListViewModel.kt
package com.sanadoing.listview_ex
data class ListViewModel (
val title : String ="",
val content : String = ""
)
5
연결하기 (그림 연결 1, 연결 2) 🎄
1. MainAcitvity에서 Adapter로 데이터 전달
2. Adapter에서 데이터를 item에 넣어서 activity_main에 있는 listview에 연결
(연결 1, 연결 2) MainActivity.kt
package com.sanadoing.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("a", "b"))
list_item.add(ListViewModel("c", "d"))
list_item.add(ListViewModel("e", "f"))
val listview = findViewById<ListView>(R.id.mainListview)
// adapter 연결
val listAdapter = ListViewAdapter(list_item)
// listview에 adapter 연결
listview.adapter = listAdapter
}
}
6
listviewModel 형태의 데이터를 아이템이 넣기 🎄
ListViewAdapter.kt
package com.sanadoing.listview_ex
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
// 리스트 데이터를 받습니다.
class ListViewAdapter(val List: MutableList<ListViewModel>) : BaseAdapter() {
override fun getCount(): Int {
return List.size
}
override fun getItem(p0: Int): Any {
return List[p0]
}
override fun getItemId(p0: Int): Long {
return p0.toLong()
}
override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
var convertView = p1
if (convertView == null) {
convertView =
LayoutInflater.from(p2?.context).inflate(R.layout.listview_item, p2, false)
}
// 데이터를 아이템에 넣어줌
val title = convertView!!.findViewById<TextView>(R.id.listviewItem)
val content = convertView!!.findViewById<TextView>(R.id.listviewItem2)
title.text = List[p0].title
content.text = List[p0].content
// List[0] - > ListViewModel("a","b")
// List[1] - > ListViewModel("d","d")
// List[2] - > ListViewModel("e","f")
return convertView!!
}
}
복습 및 참고
인프런 - 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin) 개복치개발자
728x90
'App > Android' 카테고리의 다른 글
[Android error] [error message]* What went wrong:Execution failed for task ':app:mergeDebugResources'. (0) | 2023.11.13 |
---|---|
[Android] Playstore에 어플 출시하기 (24) | 2023.08.31 |