반응형
RecyclerView 구성요소
- ViewHolder : 항목에 필요한 뷰 객체를 가짐
-Adapter : 항목을 구성
-LayoutManager : 항목을 배치
-ItemDecoration : 항목을 꾸밈
class MyViewHolder(private val binding: ItemMainBinding) : RecyclerView.ViewHolder(binding.root)
class MyAdapter(val binding: ItemMainBinding): RecyclerView.Adapter<RecyclerView.ViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
TODO("Not yet implemented")
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
TODO("Not yet implemented")
}
override fun getItemCount(): Int {
TODO("Not yet implemented")
}
}
*getItemCount(): 항목 개수를 판단하려고 자동으로 호출
*onCreateViewHolder : 항목의 뷰를 가지는 뷰 홀더를 준비하려고 자동으로 호출
*onBindViewHolder : 뷰 홀더의 뷰에 데이터를 출력하려고 자동 호출
- getItemCount 함수가 반환한 숫자만큼 onBindViewHolder 함수가 호출되어 항목을 생성.
-onCreateViewHolder 함수에서 반환하는 뷰 홀더 객체는 onBindViewHolder 함수의 매개변수로 전달.
<리사이클러뷰 사용>
package com.example.recyeclerview
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.recyeclerview.databinding.ActivityMainBinding
import com.example.recyeclerview.databinding.ItemMainBinding
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val datas = mutableListOf<String>()
for (i in 1..10){
datas.add("Item $i")
}
binding.recyclerView.layoutManager = LinearLayoutManager(this)
binding.recyclerView.adapter = MyAdapter(datas)
binding.recyclerView.addItemDecoration(DividerItemDecoration(this,LinearLayoutManager.VERTICAL))
}
}
class MyViewHolder(val binding: ItemMainBinding) : RecyclerView.ViewHolder(binding.root)
class MyAdapter(var datas: MutableList<String>) : RecyclerView.Adapter<RecyclerView.ViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder =
MyViewHolder(ItemMainBinding.inflate(LayoutInflater.from(parent.context),parent,false))
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val binding = (holder as MyViewHolder).binding
binding.itemData.text = datas[position]
binding.itemRoot.setOnClickListener {
// 이벤트
}
}
override fun getItemCount(): Int {
return datas.size
}
}
반응형
'앱 개발일지' 카테고리의 다른 글
[Android/ Kotlin] 팁 계산기 (0) | 2022.07.21 |
---|---|
[Android / Kotlin] 뷰페이저2 (0) | 2022.07.11 |
[Android / Kotlin] 프래그먼트 (0) | 2022.07.11 |
[Android/Kotlin] 액션바 (0) | 2022.07.10 |
[Android Studio / Kotlin]리소스 활용 (0) | 2022.07.05 |
댓글