listview는 너무 어렵다...
차근히 복습하자!
:list_item을 선언하고 하나하나씩 list_item에 넣어줌
val list_item = mutableListOf<String>()
list_item.add("A")
list_item.add("B")
list_item.add("C")
ListView 선언해주기
<?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>
listviewdp에 들어갈 item 만들어주기
(여기서는 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="80dp">
//text1
<TextView
android:id="@+id/listviewid"
android:text="text"
android:layout_margin="20dp"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
//text2
<TextView
android:id="@+id/listviewid2"
android:text="text"
android:layout_margin="20dp"
android:textSize="10sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
listviewmodel에 들어갈 데이터를 저장하기 위해 data class!!
package com.example.learn5_ex
//data class로 선언
data class ListViewModel (
//listviewmodel에 들어갈 문자열 데이터
val text1 : String,
val text2 : String
)
package com.example.learn5_ex
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
//MutableList입력받음!!
//데이터 입력 받는데 문자열 아닌 모델 받음
class ListViewAdapter(val List : MutableList<ListViewModel>):BaseAdapter() {
override fun getCount(): Int {
//list 크기(중요!)
return List.size
}
override fun getItem(position: Int): Any {
//특정 position에 있는 list 반환
return List[position]
}
override fun getItemId(position: Int): Long {
//list에서 특정 위치의 id 반환
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var convertView = convertView
//list = [
// listviewmodel("a", "b"),
// listviewmodel("c", "d"),
// listviewmodel("e", "f")
// ]
if (convertView == null){
convertView = LayoutInflater.from(parent?.context).inflate(R.layout.listview_item, parent,false)
}
//title=a,c,e
// 첫 번째 TextView에서 데이터를 찾아 설정
val title = convertView!!.findViewById<TextView>(R.id.listviewid)
//listviewmodel에서 선언한 문자열데이터 text1
title.text = List[position].text1
//title2 = b,d,f
// 두 번째 TextView에서 데이터를 찾아 설정
//title2까지 넣어주기 위해 listview_item.xml에서 textview 하나 더 만들고 똑같이 코드 짬
val title2 = convertView!!.findViewById<TextView>(R.id.listviewid2)
//listviewmodel에서 선언한 문자열데이터 text2
title2.text = List[position].text2
return convertView!!
}
}
Adapter와 listview 연결
package com.example.learn5_ex
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ListView
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//listview에 들어갈 데이터 넣어주기
//listviewmodel로 데이터 넣어줬기 때문에 String이 아닌ListViewModel이 들어감
val list_item2 = mutableListOf<ListViewModel>()
list_item2.add(ListViewModel("a", "b"))
list_item2.add(ListViewModel("c", "d"))
list_item2.add(ListViewModel("e", "f"))
//listview를 id 이용해 가져오기
val listview = findViewById<ListView>(R.id.mainListView)
//어댑터선언:어댑터가 list_item2를 listview에 넣어주기 위해 맞게 변환시켜줌
val listviewadapter = ListViewAdapter(list_item2)
//listview의 어댑터 = listviewadapter
listview.adapter = listviewadapter
}
}