ListView

Anna·2024년 7월 16일

[TIL]Android

목록 보기
29/34
post-thumbnail

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

실습

(1) xml파일

  • 메인 화면 레이아웃에 ListView위젯을 추가
  • xml레이아웃 파일에 정의된 ListView 위젯을 Java코드에서 참조하기 위하여 id속성을 정의한다.
<?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>

(2) 어댑터 객체 생성

  • 데이터 원본이 배열인 경우 ArrayAdapter객체 사용
  • ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
    • context : 현재 컨텍스트
    • resource : 항목으로 표시될 텍스트 뷰의 리소스 ID
    • objects : 어댑터로 공급될 데이터 원본으로 단순 배열

업로드중..

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

    }
}

(3) ListView객체에 어댑터 연결

  • 현재 화면 레이아웃(activity_main.xml)에 정의 된 뷰 중에서 id가 listView인 ListView 객체를 ViewBinding을 통해서 얻어온다.
  • 얻어온 ListView객체에 생성된 어댑터 객체(예,ArrayAdapter객체-adapter)를 연결한다

이전에 썼던 listview

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
    }
}

0개의 댓글