안드로이드
Kiel - RecyclerView Adapter Library
bacass
2020. 8. 4. 16:50
리사이클러뷰를 구현하기 위해 어댑터를 만드는 과정은 다소 귀찮거나 복잡하다고 느낍니다.
특히나 뷰타입을 다르게 꾸며줘야 할때는 더더욱...
Kotlin 환경에서 리사이클러뷰 어댑터를 쉽고 빠르고 편리하게 사용할 수 있게 도와주는 라이브러리가 나왔습니다.
https://github.com/ibrahimyilmaz/kiel
ibrahimyilmaz/kiel
Kotlin way of building RecyclerView Adapter 🧩. You do not have to write RecyclerView Adapters again and again and suffer from handling of different view types. Kiel will help you. - ibrahimyilmaz/kiel
github.com
기본적인 어댑터의 형태부터
val recyclerViewAdapter = adapterOf<Text> {
register {
type { Text::class.java }
layoutResource { R.layout.adapter_message_text_item }
viewHolder { ::TextMessageViewHolder }
onViewHolderCreated<TextMessageViewHolder>{ vh->
//you may handle your on click listener
vh.itemView.setOnClickListener {
}
}
onViewHolderBound<Text, TextMessageViewHolder> { vh, _, it ->
vh.messageText.text = it.text
vh.sentAt.text = it.sentAt
}
}
}
recyclerView.adapter = recyclerViewAdapter
다양한 여러개의 뷰타입을 표현하거나
val recyclerViewAdapter = adapterOf<MessageViewState> {
register {
type { Text::class.java }
layoutResource { R.layout.adapter_message_text_item }
viewHolder { ::TextMessageViewHolder }
onViewHolderBound<Text, TextMessageViewHolder> { vh, _, it ->
vh.messageText.text = it.text
vh.sentAt.text = it.sentAt
}
}
register {
type { Image::class.java }
layoutResource { R.layout.adapter_message_image_item }
viewHolder { ::ImageMessageViewHolder }
onViewHolderBound<Image, ImageMessageViewHolder> { vh, _, item ->
vh.messageText.text = item.text
vh.sentAt.text = item.sentAt
Glide.with(vh.messageImage)
.load(item.imageUrl)
.into(vh.messageImage)
}
}
}
recyclerView.adapter = recyclerViewAdapter
DiffUtil 을 이용할 수 있습니다.
val recyclerViewAdapter = adapterOf<MessageViewState> {
diffUtilCallback{ oldItems, newItems-> RecyclerDiffUtilCallback(oldItems,newItems)}
register {
type { Text::class.java }
layoutResource { R.layout.adapter_message_text_item }
viewHolder { ::TextMessageViewHolder }
onViewHolderBound<Text, TextMessageViewHolder> { vh, _, it ->
vh.messageText.text = it.text
vh.sentAt.text = it.sentAt
}
}
}