
ListView는 어댑터 뷰의 대표 위젯으로서, 복수 개의 항목을 수직으로 표시

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
String 배열을 이용한 ArrayAdapter객체 생성
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// 데이터 원본 준비
val items = arrayOf<String?>("item1", "item2", "item3", "item4", "item5", "item6", "item7", "item8", "item5", "item6", "item7", "item8", "item5", "item6", "item7", "item8", "item5", "item6", "item7", "item8")
//어댑터 준비 (배열 객체 이용, simple_list_item_1 리소스 사용
val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items)
// (3) 어댑터를 ListView 객체에 연결
binding.listView.adapter = adapter
}
}
data class
package com.example.menujo.data
import android.graphics.drawable.Drawable
data class FoodInfo(
val foodId : Int,
val name : String,
val introduce : String,
val tags: List<String>,
)
매니저
object FoodManager {
var foodList = initFoodData()
private fun initFoodData(): MutableList<FoodInfo> {
return mutableListOf(
FoodInfo(
1,
"짜장면",
"맛있음",
listOf("중간맛", "야채")
),
FoodInfo(
2,
"탕수육",
"맛있음",
listOf("중간맛", "야채")
),
FoodInfo(
3,
"???",
"맛있음",
listOf("중간맛", "야채")
))
}
}
어댑터
package com.example.menujo
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
import com.example.menujo.data.FoodInfo
class FoodListAdapter(private val items: MutableList<FoodInfo>): BaseAdapter()
{
override fun getCount(): Int = items.size
override fun getItem(position: Int): FoodInfo = items[position]
override fun getItemId(position: Int): Long = position.toLong()
override fun getView(position: Int, view: View?, parent: ViewGroup?): View {
var convertView = view
if (convertView == null) convertView = LayoutInflater.from(parent?.context).inflate(R.layout.item_food, parent, false)
val item: FoodInfo = items[position]
convertView!!.findViewById<TextView>(R.id.tv_menu_list_name).text = item.name
convertView!!.findViewById<TextView>(R.id.tv_menu_list_intoduce).text = item.introduce
return convertView
}
}