CustomListView 실습, 추가 기능

tpids·2024년 8월 21일

Android

목록 보기
25/29

VO.kt

package com.example.a0821

data class VO(var name: String, var url: String)

Adapter.kt

package com.example.a0821

import android.content.Context
import android.content.Intent
import android.net.Uri
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.Button
import android.widget.TextView

class Adapter(var context: Context, var List: ArrayList<VO>) : BaseAdapter() {

    // LayoutInflater : xml => 객체화
    val inflater : LayoutInflater = LayoutInflater.from(context)

    override fun getCount(): Int {
        return List.size // 아이템의 개수
    }

    override fun getItem(p0: Int): Any {
        return List[p0] // return List.get(p0)
    }

    override fun getItemId(p0: Int): Long {
        return p0.toLong()
    }

    override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {

        var view:View = inflater.inflate(R.layout.list, p2, false )

        val name = view.findViewById<TextView>(R.id.name)
        val url = view.findViewById<TextView>(R.id.url)
        val heart = view.findViewById<TextView>(R.id.heart)
        val btn = view.findViewById<Button>(R.id.btn)

        name.text = List.get(p0).name
        url.text = List.get(p0).url

        btn.setOnClickListener {
            // VO가 가지고 있는 URL 값을 그대로 활용
            // ACTION_VIEW : 웹브라우저에서 사이트를 띄워줄 때 사용하는 ACTION

            heart.text = "♥"
            val intent: Intent = Intent(Intent.ACTION_VIEW, Uri.parse(List.get(p0).url))
            // 새로운 TASK 생성
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            // 화면전환
            context.startActivity(intent)

        }
        
        return view
    }
}

MainActivity.kt

package com.example.a0821

import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.ListView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

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

        // 1. item 리스트 준비
        var List: ArrayList<VO> = ArrayList<VO>()

        // 2. adapter 생성
        val adapter:Adapter = Adapter(applicationContext, List)

        // 3. listview에 Adapter 적용
        val lv: ListView = findViewById<ListView>(R.id.lv)
        lv.adapter = adapter

        val etName: EditText = findViewById<EditText>(R.id.etName)
        val etUrl : EditText = findViewById<EditText>(R.id.etUrl)
        val btnAdd: Button = findViewById<Button>(R.id.btnAdd)

        btnAdd.setOnClickListener{
            // 사용자가 입력한 제목, url 가져오기 => LIST에 추가
            val inputName = etName.text.toString()
            val inputUrl = etUrl.text.toString()

            List.add(VO(inputName, inputUrl))
            //// => 아이템 리스트가 변경 (추가) => 어댑터에게 추가된 상황을 알려주기
            adapter.notifyDataSetChanged()
        }
//        List.add(VO("naver","https://www.naver.com/"))
//        List.add(VO("daum","https://www.daum.net/"))
//        List.add(VO("google","https://www.google.co.kr/"))


    }
}

profile
개발자

0개의 댓글