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/"))
}
}