안드로이드에서 굉장히 많이 쓰이는 것중 하나인 ListVIew를 만드는 방법에 대해서 알아보겠습니다.
package com.sangmoki.listview
import android.widget.BaseAdapter
// 데이터를 받아주기 위한 Adapter 클래스
// 문자열 데이터를 받기 위해 <String> 타입으로 설정
class ListViewAdapter(val List : MutableList<String>) : BaseAdapter() {
}
class ListViewAdapter(val List : MutableList<String>) : BaseAdapter() {
// 전체 아이템의 개수 반환
override fun getCount(): Int {
return List.size
}
// 아이템 반환 (리스트에서 몇번째에 자리한 아이템인지)
override fun getItem(position: Int): Any {
return List[position]
}
// 아이템의 ID 반환
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
}
}
<?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" />
</LinearLayout>
// list_view_item에서 설정한 item_list_view 레이아웃을 inflate하여 반환
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var convertView = convertView
// 만약 convertView가 null이라면
if (convertView == null) {
// item_list_view 레이아웃을 inflate하여 convertView에 저장
convertView = LayoutInflater.from(parent?.context).inflate(R.layout.list_view_item, parent, false)
}
// 컨버트뷰를 가져오면 반환해준다.
return convertView!!
}
// String 타입의 가변 배열 변수 생성
val list_item = mutableListOf<String>()
// 가변 배열에 아이템 추가
list_item.add("1번째 아이템")
list_item.add("2번째 아이템")
list_item.add("3번째 아이템")
// ListView 변수 생성
val listview = findViewById<ListView>(R.id.mainListView)
// ListViewAdapter 클래스의 객체 생성
val listAdapter = ListViewAdapter(list_item)
// ListView에 Adapter 설정
listview.adapter = listAdapter
// list_view_item에서 설정한 item_list_view 레이아웃을 inflate하여 반환
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var convertView = convertView
// 만약 convertView가 null이라면
if (convertView == null) {
// item_list_view 레이아웃을 inflate하여 convertView에 저장
convertView = LayoutInflater.from(parent?.context).inflate(R.layout.list_view_item, parent, false)
}
// listViewItem 레이아웃에서 TextView를 찾아 data 변수에 저장
val data = convertView!!.findViewById<TextView>(R.id.listViewItem)
// data 변수의 text(android:text)에 List[아이템인덱스]를 넣어준다.
data.text = List[position]
// 컨버트뷰를 가져오면 반환해준다.
return convertView!!
}