ibrahimyilmaz / Kiel
Licence: apache-2.0
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.
Stars: ✭ 297
Programming Languages
kotlin
9241 projects
Projects that are alternatives of or similar to Kiel
AccordionRecycler
Android RecyclerView Adapter with nested items & expand/contract functionality
Stars: ✭ 17 (-94.28%)
Mutual labels: recyclerview, recyclerview-adapter
ModularAdapter
The RecyclerView.Adapter that makes your life simple!
Stars: ✭ 14 (-95.29%)
Mutual labels: recyclerview, recyclerview-adapter
RvClickListenerExample
Example showing the implementation of onItemClickListener & getAdapterPosition() in RecyclerView.
Stars: ✭ 22 (-92.59%)
Mutual labels: recyclerview, recyclerview-adapter
Tableview
TableView is a powerful Android library for displaying complex data structures and rendering tabular data composed of rows, columns and cells.
Stars: ✭ 2,928 (+885.86%)
Mutual labels: recyclerview, recyclerview-adapter
RecyclerELE
Android Library for easy addition of Empty, Loading and Error views in a RecyclerView
Stars: ✭ 27 (-90.91%)
Mutual labels: recyclerview, recyclerview-adapter
App-Manager-Android
An app manager for Android written in Kotlin. View app related info, launch or uninstall apps.
Stars: ✭ 31 (-89.56%)
Mutual labels: recyclerview, recyclerview-adapter
jubako
A small API to help display rich content in a RecyclerView such as a wall of carousels
Stars: ✭ 28 (-90.57%)
Mutual labels: recyclerview, recyclerview-adapter
slush
This library will no longer be updated 😭
Stars: ✭ 26 (-91.25%)
Mutual labels: recyclerview, recyclerview-adapter
Recyclerviewevent
RecyclerView onItemClick、onItemLongClick、drag、swipe、divider、reuse disorder RecyclerView 梳理:点击&长按事件、分割线、拖曳排序、滑动删除、优雅解决 EditText 和 CheckBox 复用错乱问题
Stars: ✭ 265 (-10.77%)
Mutual labels: recyclerview, recyclerview-adapter
SuperAdapter
A Super simple library can be used for inserting elements in between RecyclerView's elements.
Stars: ✭ 18 (-93.94%)
Mutual labels: recyclerview, recyclerview-adapter
Statik
A simple static list information backed by RecyclerView for Android in Kotlin
Stars: ✭ 22 (-92.59%)
Mutual labels: recyclerview, recyclerview-adapter
SimplifiedRecyclerview
An android library to help you get rid of boiler plate code when setting up Recyclerview
Stars: ✭ 19 (-93.6%)
Mutual labels: recyclerview, recyclerview-adapter
SortedListAdapter
The RecyclerView.Adapter that makes your life easy!
Stars: ✭ 48 (-83.84%)
Mutual labels: recyclerview, recyclerview-adapter
InfiniteScrollRecyclerView
Enables the RecyclerView to Auto scroll for indefinite time.
Stars: ✭ 49 (-83.5%)
Mutual labels: recyclerview, recyclerview-adapter
recyclerview-kotlin
10+ Tutorials on RecyclerView in Kotlin
Stars: ✭ 41 (-86.2%)
Mutual labels: recyclerview, recyclerview-adapter
LxAdapter
RecyclerView Adapter Library
Stars: ✭ 50 (-83.16%)
Mutual labels: recyclerview, recyclerview-adapter
Recycling
A Library for make an easy and faster RecyclerView without adapter
Stars: ✭ 57 (-80.81%)
Mutual labels: recyclerview, recyclerview-adapter
PrimeAdapter
PrimeAdapter makes working with RecyclerView easier.
Stars: ✭ 54 (-81.82%)
Mutual labels: recyclerview, recyclerview-adapter
DiverseRecyclerAdapter
A small and yet powerful library, which greatly simplifies building lists of different items
Stars: ✭ 16 (-94.61%)
Mutual labels: recyclerview, recyclerview-adapter
kandy
Sweet Android libraries written in Kotlin
Stars: ✭ 19 (-93.6%)
Mutual labels: recyclerview, recyclerview-adapter
Kiel
Kiel is a RecyclerView.Adapter
with a minimalistic and convenient Kotlin DSL which provides utility on top of Android's normal RecyclerView.Adapter
.
Most of the time:
- We found ourselves repeating same boilerplate code for
RecyclerView.Adapter
. - We have difficulty in handling
RecyclerView.Adapter
when there are manyviewTypes
.
But now, Kiel may help us to get rid of these problems. You may read the detailed story in this blog post.
Usage:
Basic Usage:
adapterOf
val recyclerViewAdapter = adapterOf<Text> {
register(
layoutResource = R.layout.adapter_message_text_item,
viewHolder = ::TextMessageViewHolder,
onViewHolderCreated = { vh->
//you may handle your on click listener
vh.itemView.setOnClickListener {
}
},
onBindViewHolder = { vh, _, it ->
vh.messageText.text = it.text
vh.sentAt.text = it.sentAt
}
)
}
recyclerView.adapter = recyclerViewAdapter
pagingDataAdapterOf
val pagingDataAdapterOf = pagingDataAdapterOf<Text> {
register(
layoutResource = R.layout.adapter_message_text_item,
viewHolder = ::TextMessageViewHolder,
onViewHolderCreated = { vh->
//you may handle your on click listener
vh.itemView.setOnClickListener {
}
},
onBindViewHolder = { vh, _, it ->
vh.messageText.text = it.text
vh.sentAt.text = it.sentAt
}
)
}
recyclerView.adapter = recyclerViewAdapter
Different View Types:
You may register different ViewHolder
s to your adapters.
register(
layoutResource = R.layout.adapter_message_text_item,
viewHolder = ::TextMessageViewHolder,
onBindViewHolder = { vh, _, it ->
vh.messageText.text = it.text
vh.sentAt.text = it.sentAt
}
)
register(
layoutResource = R.layout.adapter_message_image_item,
viewHolder = ::ImageMessageViewHolder,
onBindViewHolder = { vh, _, item ->
vh.messageText.text = item.text
vh.sentAt.text = item.sentAt
Glide.with(vh.messageImage)
.load(item.imageUrl)
.into(vh.messageImage)
}
)
Handling Events:
As ViewHolder
instance is accessible in:
onViewHolderCreated
onBindViewHolder
onBindViewHolderWithPayload
You can handle the events in the same way how you did it before.
val recyclerViewAdapter = adapterOf<Text> {
register(
layoutResource = R.layout.adapter_message_text_it,
viewHolder = ::TextMessageViewHolder,
onViewHolderCreated = { vh->
vh.itemView.setOnClickListener {
}
vh.messageText.addTextChangedListener{text ->
}
},
onBindViewHolder = { vh, _, it ->
vh.messageText.text = it.text
vh.sentAt.text = it.sentAt
}
)
}
recyclerView.adapter = recyclerViewAdapter
View Binding:
As ViewHolder
instance is accessible in:
onViewHolderCreated
onBindViewHolder
onBindViewHolderWithPayload
You may define your ViewBinding in your ViewHolder class and you can easily reach it:
class TextMessageViewHolder(view: View) : RecyclerViewHolder<Text>(view) {
val binding = AdapterTextItemBinding.bind(view)
}
val recyclerViewAdapter = adapterOf<Text> {
register(
layoutResource = R.layout.adapter_message_text_it,
viewHolder = ::TextMessageViewHolder,
onViewHolderCreated = { vh->
vh.binding.
},
onBindViewHolder = { vh, _, it ->
vh.binding.messageText.text = it.text
vh.binding.sentAt.text = it.sentAt
}
)
}
DiffUtil:
val recyclerViewAdapter = adapterOf<MessageViewState> {
diff(
areContentsTheSame = { old, new -> old == new },
areItemsTheSame = { old, new -> old.message.id == new.message.id },
getChangePayload = { oldItem, newItem ->
val diffBundle = Bundle()
if (oldItem.selectionState != newItem.selectionState) {
diffBundle.putParcelable(
TextMessageViewHolder.KEY_SELECTION,
newItem.selectionState
)
}
if (diffBundle.isEmpty) null else diffBundle
}
)
register (
layoutResource = R.layout.adapter_message_text_item,
viewHolder = ::TextMessageViewHolder,
onBindViewHolder = { vh, _, it ->
vh.messageText.text = it.message.text
vh.sentAt.text = it.message.sentAt
}
)
Download
implementation 'me.ibrahimyilmaz:kiel:latestVersion'
License
Copyright 2020 Ibrahim Yilmaz
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].