코딩하는 일용직 노동자

Kiel - RecyclerView Adapter Library 본문

안드로이드

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
        }
    }
}