RecyclerView를 사용하기 위해서는 모델, 어댑터가 추가로 필요하다.
모델은 어댑터 하나하나를 담아놓는 그릇이라고 생각하면 되고,
어댑터는 리스트 한줄을 불러올때(?)마다 실행되는것이라고 생각하면 된다.
adpater.kt
-> 이곳에서 각 리스트를 불러올때마다 실행될 행동을 작성한다.
class MainActivityAdapter: RecyclerView.Adapter<MainActivityAdapter.MyViewHolder>() {
var datalist = mutableListOf<MainActivityModel>()//리사이클러뷰에서 사용할 데이터 미리 정의 -> 나중에 MainActivity등에서 datalist에 실제 데이터 추가
inner class MyViewHolder(private val binding: RecylerviewBookItemBinding): RecyclerView.ViewHolder(binding.root) {
fun bind(dogData:MainActivityModel){
binding.textviewBookName.text=dogData.name
binding.textviewBookReview.text= dogData.age.toString()
}
}
//만들어진 뷰홀더 없을때 뷰홀더(레이아웃) 생성하는 함수
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val binding= RecylerviewBookItemBinding.inflate(LayoutInflater.from(parent.context),parent,false)
return MyViewHolder(binding)
}
override fun getItemCount(): Int =datalist.size
//recyclerview가 viewholder를 가져와 데이터 연결할때 호출
//적절한 데이터를 가져와서 그 데이터를 사용하여 뷰홀더의 레이아웃 채움
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.bind(datalist[position])
}
}
model.kt
data class MainModel (
val name : String,
val age : Int
)
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
lateinit var mainActivityAdapter: MainActivityAdapter
val datas = mutableListOf<MainActivityModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
initList()
}
private fun initList() {
with(datas){
add(MainActivityModel("dog1",20))
add(MainActivityModel("dog2",20))
add(MainActivityModel("dog3",20))
}
val adapter=MainActivityAdapter() //어댑터 객체 만듦, 해당 줄을 실행할때 adapter 코드가 실행된다.
adapter.datalist=datas //데이터 넣어줌
binding.listview.adapter=adapter //리사이클러뷰에 어댑터 연결
binding.listview.layoutManager= LinearLayoutManager(this) //레이아웃 매니저 연결
}
}
참고링크
https://velog.io/@24hyunji/AndroidKotlin-RecyclerView-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0
'프로그래밍 > Kotlin' 카테고리의 다른 글
[Kotlin] Dialog 종료시 커스텀 리스너 동작 (0) | 2021.12.14 |
---|---|
[Kotlin] 전체화면으로 DialogFragment 열기 (0) | 2021.12.13 |
[Kotlin] progressbar 진행시 터치 불가능하도록 설정 (0) | 2021.12.09 |
[Kotlin] 안드로이드 자동로그인 코드 (0) | 2021.12.09 |
Json데이터 생성 및 Gson 사용 (0) | 2021.12.07 |
댓글