리사이클러뷰(ResyclerView)
: 스피너처럼 목록을 화면에 출력.
→스피너 확장판
[ 데이터 - 어댑터 - 스피너 / 리사이클러뷰 ]
스피너는 스피터 어댑터를 사용해서 데이터 연결.
리사이클러뷰는 리사이클러 어댑터를 사용해서 데이터 연결.
//Memo.kt
package com.example.containerrecyclerview
data class Memo(var no: Int, var title: String, var timestamp: Long)
//CustomAdapter.kt
//Holder 파일
package com.example.containerrecyclerview
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import com.example.containerrecyclerview.databinding.ItemRecyclerBinding
import java.text.SimpleDateFormat
class CustomAdater: RecyclerView.Adapter<Holder>() {
//추상화 클래스(오버라이드 해줘야 함), 제네릭이라 타입 지정해줘야 함.
var listData = mutableListOf<Memo>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
//item_recycler 화면을 onCreate
val binding = ItemRecyclerBinding.inflate(LayoutInflater.from(parent.context),parent, false)
return Holder(binding)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
//실제 화면에 보여주는 것.
val memo = listData.get(position)
holder.setMemo(memo)
}
override fun getItemCount(): Int {
//메모 데이터 갯수.
return listData.size
}
}
class Holder(val binding: ItemRecyclerBinding): RecyclerView.ViewHolder(binding.root){
//ViewHolder 상속 , binding에 item_recycler.xml 화면 전달.
//이 클래스를 먼저 만들고 위에 추상클래스 제네릭 타입을 Holder로 지정해줘 함.->이거 "먼저" 만드는 것 아주아주 중요!!!
init{
binding.root.setOnClickListener {
Toast.makeText(binding.root.context,"클릭된 아이템 = ${binding.textTitle.text}", Toast.LENGTH_LONG).show()
}
}
fun setMemo(memo: Memo){
binding.textNo.text = "${memo.no}"
binding.textTitle.text = memo.title
var sdf = SimpleDateFormat("yyyy/MM/dd")
//date 데이터 크기 자체가 너무 커서 현재 시간으로 반환해주는 함수 사용
var formattedDate = sdf.format(memo.timestamp)
binding.textDate.text = formattedDate
}
}
//MainActivicy.kt
package com.example.containerrecyclerview
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.containerrecyclerview.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
val binding by lazy{
ActivityMainBinding.inflate(layoutInflater)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
val data: MutableList<Memo> = loadData()
var adapter = CustomAdater()
adapter.listData = data
binding.recyclerView.adapter = adapter
binding.recyclerView.layoutManager = LinearLayoutManager(this)
}
fun loadData(): MutableList<Memo>{
val data: MutableList<Memo> = mutableListOf()
for(no in 1..100){
val title = "이것이 안드로이드다 ${no}"
val date = System.currentTimeMillis()
var memo = Memo(no, title, date)
data.add(memo)
}
return data
}
}
'전공수업 > Kotlin' 카테고리의 다른 글
[Kotlin] 모바일프로그래밍 6주차 (0) | 2024.10.12 |
---|---|
[Kotlin] 모바일프로그래밍 5주차 (0) | 2024.10.12 |
[Kotlin] 모바일프로그래밍 4주차 (0) | 2024.10.12 |
[Kotlin] 모바일프로그래밍 2-3주차(2) (1) | 2024.10.12 |
[Kotlin] 모바일프로그래밍 2-3주차(1) (0) | 2024.10.12 |