본문 바로가기
안드로이드/AdapterView

안드로이드 CustomAdapter

by 김어찐 2022. 6. 7.
728x90

AdapterView의 항목을 자유롭게 디자인해서 사용할 때는 SimpleAdapter 만으로도 충분하다.
하지만 AdapterView 자체를 커스터마이징하여 특별한 기능을 부여하고 싶을 때는 Adapter 클래스를 구현하면된다.

 

 

BaseAdapter

BaseAdapter를 상속받아 다음 메서드를 구현하면 된다.
getCount : AdapterView를 통해 보여줄 항목의 개수를 반환한다.
getView : AdapterView를 통해 보여줄 항목의 View를 반환한다.

 

package com.example.customadapter

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.Button
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.row.*
import kotlinx.android.synthetic.main.row.rowTextView
import kotlinx.android.synthetic.main.row.view.*

class MainActivity : AppCompatActivity() {

    val data1 = arrayOf("데이터1","데이터2","데이터3","데이터4","데이터5",)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        list1.adapter = adapter1
    }

    val adapter1 = object : BaseAdapter() {
        override fun getCount(): Int {
            return data1.size
        }

        override fun getItem(position: Int): Any? {
            return null
        }

        override fun getItemId(position: Int): Long {
            return 0
        }

        // 항목 하나를 구성하기 위해 호출되는 메서드
        override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
            // 재사용 가능한 View를 변수에 담는다.
            var rowView = convertView

            if (rowView == null) {
                rowView =layoutInflater.inflate(R.layout.row,null)
            }

//            // 항목 뷰에 내부에 배치되어 있는 뷰들의 주소값을 가져온다.
//            val text1 = rowView?.findViewById<TextView>(R.id.rowTextView)
//            val btn1 = rowView?.findViewById<Button>(R.id.rowButton1)
//            val btn2 = rowView?.findViewById<Button>(R.id.rowButton2)
//
//            text1?.text = data1[position]
//
//            btn1?.tag = position
//            btn2?.tag = position
//
//            btn1?.setOnClickListener {
//                textView?.text = "첫 번째 버튼을 늘렀습니다 : ${it.tag}"
//            }
//
//            btn2?.setOnClickListener {
//                textView?.text = "두 번째 버튼을 늘렀습니다 : ${it.tag}"
//            }

            rowView?.run {
                rowTextView.text = data1[position]
                rowButton1.tag=position
                rowButton2.tag= position

                rowButton1.setOnClickListener {
                    textView.text = "첫 번째 버튼을 늘렀습니다 : ${it.tag}"
                }

                rowButton2.setOnClickListener {
                    textView.text = "두 번째 버튼을 늘렀습니다 : ${it.tag}"
                }
            }
            return rowView!!
        }
    }
}

 

 

 

728x90

'안드로이드 > AdapterView' 카테고리의 다른 글

안드로이드 GridView  (0) 2022.06.07
안드로이드 Spinner  (0) 2022.06.07
안드로이드 Custom ListView 2  (0) 2022.06.07
안드로이드 Custom ListView1  (0) 2022.06.06
안드로이드 ListView  (0) 2022.06.02