Don't write a RecyclerView adapter again. Not even a ViewHolder!

Overview

Download Android Arsenal License Gitter

LastAdapter

Don't write a RecyclerView adapter again. Not even a ViewHolder!

  • Based on Android Data Binding
  • Written in Kotlin
  • No need to write the adapter
  • No need to write the viewholders
  • No need to modify your model classes
  • No need to notify the adapter when data set changes
  • Supports multiple item view types
  • Optional Callbacks/Listeners
  • Very fast — no reflection
  • Super easy API
  • Tiny size: ~30 KB
  • Minimum Android SDK: 9

Setup

Gradle

// apply plugin: 'kotlin-kapt' // this line only for Kotlin projects

android {
    ...
    dataBinding.enabled true 
}

dependencies {
    compile 'com.github.nitrico.lastadapter:lastadapter:2.3.0'
    // kapt 'com.android.databinding:compiler:GRADLE_PLUGIN_VERSION' // this line only for Kotlin projects
}

Usage

Create your item layouts with <layout> as root:

<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable name="item" type="com.github.nitrico.lastadapterproject.item.Header"/>
    </data>
    
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@{item.text}"/>
        
</layout>

It is important for all the item types to have the same variable name, in this case "item". This name is passed to the adapter builder as BR.variableName, in this case BR.item:

// Java
new LastAdapter(listOfItems, BR.item)
           .map(Header.class, R.layout.item_header)
           .map(Point.class, R.layout.item_point)
           .into(recyclerView);
// Kotlin
LastAdapter(listOfItems, BR.item)
           .map<Header>(R.layout.item_header)
           .map<Point>(R.layout.item_point)
           .into(recyclerView)

The list of items can be an ObservableList if you want to get the adapter automatically updated when its content changes, or a simple List if you don't need to use this feature.

LayoutHandler

The LayoutHandler interface allows you to use different layouts based on more complex criteria. Its one single method receives the item and the position and returns the layout resource id.

// Java sample
new LastAdapter(listOfItems, BR.item)
           .handler(handler)
           .into(recyclerView);

private LayoutHandler handler = new LayoutHandler() {
    @Override public int getItemLayout(@NotNull Object item, int position) {
        if (item instanceof Header) {
            return (position == 0) ? R.layout.item_header_first : R.layout.item_header;
        } else {
            return R.layout.item_point;
        }
    }
};
// Kotlin sample
LastAdapter(listOfItems, BR.item).layout { item, position ->
    when (item) {
        is Header -> if (position == 0) R.layout.item_header_first else R.layout.item_header
        else -> R.layout.item_point 
    }
}.into(recyclerView)

For further information, please take a look at my article at Medium.

Custom fonts

You might also want to try FontBinder to easily use custom fonts in your XML layouts.

Acknowledgments

Thanks to Yigit Boyar and George Mount for this talk.

Author

Miguel Ángel Moreno

I'm open to new job positions - Contact me!

AngelList Email Facebook Google+ Linked.in Twitter

License

Copyright 2016 Miguel Ángel Moreno

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.
Comments
  • How can one set OnChildClickListener for item

    How can one set OnChildClickListener for item

    is it possible to add image in imageview via picasso

    <ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@{viewmodel.firstImage}"
    android:id="@+id/imageView3" />
    
    opened by syedalinaqi 14
  • Allow more type specific reactions without switch statements

    Allow more type specific reactions without switch statements

    In my own use of data binding and view holders I have some more complex interactions from the view to the view holder. I have several controls within an item that have their own listeners. So I have different ViewHolder types and I actually have a variable in the layout for the holder and I can bind to or use methods on the ViewHolder to do listeners or provide additional data to the view.

    Looking at this library as a possible alternative to my complex Adapter and ViewHolder, I don't see a good way to handle these more complex interactions. It is possible using the OnBindListener, but that is a single listener for all types. You end up having to do a switch statement and probably a cast. That is a code smell and what we would like to avoid by using a library like this.

    I am trying to think what is the best way to accomplish this in a minimally invasive way. What I am envisioning is a version of the map call that also accepts a parameter of a class that extends LastAdapter.ViewHolder which has an onBind method that subclasses can override to do custom work (and FYI you should add support for unbinding as well to clean up things when a view is removed from the list).

    Just sort of thinking out loud here.

    opened by dalewking 14
  • DataBinderMapperImpl not generated

    DataBinderMapperImpl not generated

    Hi, I am getting following error when I attempt to use the library in my project.

    Library version 2.3.0 Android Studio: 3.1 Canary 8 Compile SDK 27 Gradle and KAPT version: 3.1.0-alpha08

    :app:javaPreCompileDebug UP-TO-DATE C:\pahttoproject\app\build\generated\source\kapt\debug\android\databinding\DataBinderMapperImpl.java:7: error: cannot find symbol addMapper(new com.github.nitrico.lastadapter.DataBinderMapperImpl()); ^ symbol: class DataBinderMapperImpl location: package com.github.nitrico.lastadapter 1 error :app:compileDebugJavaWithJavac FAILED

    Thank you :)

    opened by veresvit 9
  • API for LastAdapter 2.0

    API for LastAdapter 2.0

    LastAdapter 2.0 is coming soon and I'd like to hear your thoughts or suggestions about its API.

    Listeners:

    • They will be specific for each item type, instead of one for the whole adapter.
    • They probably will not provide parameters view, type and item anymore, only binding and position. item and view will be available through binding.item and binding.root.
    • I will add an onRecycle callback for the view being recycled.
    • Maybe another onCreate callback for the ViewHolder being created (for the first time). Not sure yet.
    • Should I keep the onClick and onLongClick listeners? Are you really using them? I mean, you can also set them in the layout itself or in the onBind callback.

    The API for Kotlin is going to be pretty cool, in my opinion:

    LastAdapter.with(Data.items, BR.item)
        .map<Header, ItemHeaderBinding>(R.layout.item_header) {
            onCreate { println("Created ${binding.item} at position $position") }
            onBind { println("Bound ${binding.item} at position $position") }
            onClick { context.toast("Click on ${binding.item} at position $position") }
            onLongClick { context.toast("Long click on ${binding.item} at position $position") }
            onRecycle { println("Recycled ${binding.item} at position $position") }
        }
        .map<Point, ItemPointBinding>(R.layout.item_point) /*{
            onCreate { println("Created ${binding.item} at position $position") }
            onBind { println("Bound ${binding.item} at position $position") }
            onClick { context.toast("Click on ${binding.item} at position $position") }
            onLongClick { context.toast("Long click on ${binding.item} at position $position") }
            onRecycle { println("Recycled ${binding.item} at position $position") }
        }*/
        .into(list)
    

    API for Java is not so cool, at least right now...

    LayoutHandler / TypeHandler: With the listeners being specific for each type, the "LayoutHandler" should become a "TypeHandler" and returns more than just the layout. Probably something like:

    val typeHeader = Type<ItemHeaderBinding>(R.layout.item_header)
        .onBind { println("Bound ${binding.item} at position $position") }
        .onClick { context.toast("Click on ${binding.item} at position $position") }
        .onLongClick { context.toast("Long click on ${binding.item} at position $position") }
        .onRecycle { println("Recycled ${binding.item} at position $position") }
    
    val typePoint = Type<ItemPointBinding>(R.layout.item_point)
        .onClick { context.toast("Click on ${binding.item} at position $position") }
    
    val typeHeaderFist = Type<ItemHeaderFirstBinding>(R.layout.item_header_first) 
        .onBind { println("Bound ${binding.item} at position $position") }
    
    LastAdapter.with(Data.items, BR.item) {
        when (item) {
            is Header -> if (position == 0) typeHeaderFirst else typeHeader
            is Point -> typePoint
            else -> null
        }
    }.into(list)
    

    Data Binding: I'm even considering the possibility of letting the "users" decide if they want to use Data Binding or not, and do the binding manually if they want.

    Feel free to leave your thoughts here :)

    question 
    opened by nitrico 8
  • IndexOutOfBoundExeption when notifyDataSetChanged() is called

    IndexOutOfBoundExeption when notifyDataSetChanged() is called

    Stack trace:

    07-10 15:11:53.936 E/AndroidRuntime: FATAL EXCEPTION: main
                                         Process: com.nejctomsic.registerzdravil.debug, PID: 18830
                                         java.lang.IndexOutOfBoundsException: Index: 3, Size: 1
                                             at java.util.ArrayList.get(ArrayList.java:411)
                                             at com.github.nitrico.lastadapter.LastAdapter.getType(LastAdapter.kt:178)
                                             at com.github.nitrico.lastadapter.LastAdapter.onViewRecycled(LastAdapter.kt:132)
                                             at com.github.nitrico.lastadapter.LastAdapter.onViewRecycled(LastAdapter.kt:27)
                                             at android.support.v7.widget.RecyclerView$Recycler.dispatchViewRecycled(RecyclerView.java:6064)
    

    The issue was not present until version 2.2.2. It was added in this commit. The problem is when notifyDataSetChanged() is called on the adapter, with a new backing list that has fewer elements than the old one. To fix this, the line that compares the position should be reverted to this one.

    opened by alenjularic 7
  • IllegalStateException: reference.get() must not be null

    IllegalStateException: reference.get() must not be null

    Hello.

    I use LastAdapter v1.2.0. My code is written in Java. Sometimes when I go back to activity with fragment I use LastAdapter in I get this:

    java.lang.IllegalStateException: reference.get() must not be null
        at com.github.nitrico.lastadapter.WeakReferenceOnListChangedCallback.getAdapter(WeakReferenceOnListChangedCallback.kt:30)
        at com.github.nitrico.lastadapter.WeakReferenceOnListChangedCallback.onItemRangeInserted(WeakReferenceOnListChangedCallback.kt:41)
        at android.databinding.ListChangeRegistry$1.onNotifyCallback(ListChangeRegistry.java:47)
        at android.databinding.ListChangeRegistry$1.onNotifyCallback(ListChangeRegistry.java:38)
        at android.databinding.CallbackRegistry.notifyCallbacks(CallbackRegistry.java:201)
        at android.databinding.CallbackRegistry.notifyFirst64(CallbackRegistry.java:122)
        at android.databinding.CallbackRegistry.notifyRemainder(CallbackRegistry.java:169)
        at android.databinding.CallbackRegistry.notifyRecurse(CallbackRegistry.java:145)
        at android.databinding.CallbackRegistry.notifyCallbacks(CallbackRegistry.java:91)
        at android.databinding.ListChangeRegistry.notifyCallbacks(ListChangeRegistry.java:135)
        at android.databinding.ListChangeRegistry.notifyInserted(ListChangeRegistry.java:93)
        at android.databinding.ObservableArrayList.notifyAdd(ObservableArrayList.java:118)
        at android.databinding.ObservableArrayList.addAll(ObservableArrayList.java:60)
        ...
    
    opened by LissF 6
  • Error on BR

    Error on BR

    Hi, I'm trying to use LastAdapter, and have a problem. I refered app on github, and have error "Unresolved reference: BR". Is this error occur before?

    Here's my item layout source

    <layout xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <data>
        <variable name="item" type="com.example.icarusud.project.RecyclerViewItem" />
    </data>
    
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@{item.text}" />
    </layout>
    
    opened by molo0 6
  • onBindListener overload for lambdas

    onBindListener overload for lambdas

    Having to do this is ugly:

            LastAdapter.with(content, BR.item)
                    .map<ListItem>(R.layout.fragment_grid_list_item)
                    .onBindListener(object : LastAdapter.OnBindListener {
                        override fun onBind(item: Any, view: View, pos: Int) {
                            doStuff()
                        }
                    })
                    .into(contentView)
    

    I would much rather do this:

            LastAdapter.with(content, BR.item)
                    .map<ListItem>(R.layout.fragment_grid_list_item)
                    .onBindListener { item, view, pos -> doStuff() }
                    .into(contentView)
    

    Also, similar for click and long click listeners.

    I can provide the PR if you approve this feature request.

    enhancement 
    opened by sargunv 6
  • AndroidX Support

    AndroidX Support

    Just tried to update my project to AndroidX (https://developer.android.com/topic/libraries/support-library/androidx-rn) and LastAdapter took issue with the change, despite the Refactoring Tool claiming to use dependency translation to enable compatibility with Support-library-based libraries.

    opened by ptrbrynt 4
  • Mixing version can lead to runtime crashes

    Mixing version can lead to runtime crashes

    `apply plugin: 'com.android.application'

    apply plugin: 'kotlin-android'

    apply plugin: 'kotlin-android-extensions'

    apply plugin: 'kotlin-kapt'

    android { compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { applicationId "com.fintech.assetvantage" minSdkVersion 16 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } dataBinding{ enabled true } }

    dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', { exclude group: 'com.android.support', module: 'support-annotations' }) implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" kapt 'com.android.databinding:compiler:3.0.0-beta6' implementation 'com.github.nitrico.lastadapter:lastadapter:2.2.2' } ` My app:build.gradle file is like above. support library dependacy gives error like Mixing version can lead to runtime crashes

    opened by VijayMakwana 4
  • Changelog for version 2.3.0?

    Changelog for version 2.3.0?

    I see new version 2.3.0 but no change log there. We use LastAdapter in every project. It is important to know the changes before updating. Can you please provide the changes?

    Thanks a lot for the wonderful library!

    opened by kirtan403 3
  • Please move to mavenCentral (JCenter is closing down)

    Please move to mavenCentral (JCenter is closing down)

    Hi there,

    LastAdapter is currently only available from JCenter as a dependency. Since version 4.2 of Android studio, there is a warning: "JCenter is at end of life". Googling this revealed this article: https://wajahatkarim.com/2021/02/jcenter-bintray-shutting-down/

    So please move over to maven Central.

    Kind regards,

    Lars

    opened by lsh-silpion 1
  • Bind issues after Android Studio 3.2 release

    Bind issues after Android Studio 3.2 release

    I just migrated whole project to Android Studio 3.2.1, gradle 4.10, Kotlin 1.2.71

    I can't build project due to error with generated binding class:

    image

    Do you have any idea what might be the cause? Cleaning project does not help here. I'm using databinding compiler from androidx reference, but i doubt that this have any impact on this

    opened by jakoss 3
  • Support binding to LiveData (pass LifecycleOwner to items)

    Support binding to LiveData (pass LifecycleOwner to items)

    Since version 3.1 Android Studio supports databinding to LiveData. But in order to track changes of a LiveData field, ViewDataBinding object must be provided with LifecycleOwner which LastAdapter does not. So binding to LiveData via LastAdapter is efficiently onetime binding. Please, add possibility to pass LifecycleOwner into LastAdapter (probably, constructor argument will do fine).

    opened by lxyd 0
  • Crash on LayoutHandler in kotlin

    Crash on LayoutHandler in kotlin

    There is a problem with LayoutHandlerAdapter. I want to use it in my project, when LastAdapter with Layout is loader I've got KotlinNullPointerException. Here is my code: LastAdapter(viewModel.conversation, BR.item).layout { item, _ -> when(item) { is ContactItem -> { if (item.isCustomer) { R.layout.item_client } else { R.layout.item_service } } else -> R.layout.item_service } }.into(claimContactRv)

    When I use normal LastAdapter (without LayoutHandling) everything works well.

    I also run example project and get the same error. I paste it below.

    kotlin.KotlinNullPointerException at com.github.nitrico.lastadapter.LastAdapter.onBindViewHolder(LastAdapter.kt:109) at com.github.nitrico.lastadapter.LastAdapter.onBindViewHolder(LastAdapter.kt:27) at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6508) at com.github.nitrico.lastadapter.LastAdapter.onBindViewHolder(LastAdapter.kt:125) at com.github.nitrico.lastadapter.LastAdapter.onBindViewHolder(LastAdapter.kt:27) at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6541) at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5484) at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5750) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5589) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5585) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2231) at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1558) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1518) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:610) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3719) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3436) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3988) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1197) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1769) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1197) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:443) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1931) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) at android.view.Choreographer.doCallbacks(Choreographer.java:670) at android.view.Choreographer.doFrame(Choreographer.java:606)

    opened by adammasyk 1
Owner
Miguel Ángel Moreno
Android developer
Miguel Ángel Moreno
Android library defining adapter classes of RecyclerView to manage multiple view types

RecyclerView-MultipleViewTypeAdapter RecyclerView adapter classes for managing multiple view types Release Note [Release Note] (https://github.com/yqr

Yoshihito Ikeda 414 Nov 21, 2022
A Common RecyclerView.Adapter implementation which supports all kind of items and has useful data operating APIs such as remove,add,etc.

##PowerfulRecyclerViewAdapter A Common RecyclerView.Adapter implementation which supports any kind of items and has useful data operating APIs such as

null 313 Nov 12, 2022
kotlin dsl for kids to simplify RecyclerView.Adapter logic

KidAdapter RecyclerView adapter for kids. A kotlin dsl mechanism to simplify and reduce boilerplate logic of a RecyclerView.Adapter. With KidAdapter y

Eugeniu Tufar 56 Nov 27, 2022
A RecyclerView Adapter which allows you to have an Infinite scrolling list in your apps

Infinite Recycler View A RecyclerView Adapter which allows you to have an Infinite scrolling list in your apps. This library offers you a custom adapt

IB Sikiru 26 Dec 10, 2019
Reproducible sample with Fix for Memory Leak in RecyclerView Adapter

Memory Leak RecyclerView Adapter Reproducible Sample with Fix Video Instructions: https://www.youtube.com/c/awesomedevnotes Code Only the relevant and

Awesome Dev Notes | Android Dev Notes YouTube 7 Jun 7, 2022
Elegant design and convenient to use RecyclerView adapter library based on Kotlin DSL.

xAdapter: Kotlin DSL 风格的 Adapter 封装 1、简介 该项目是 KotlinDSL 风格的 Adapter 框架封装,用来简化 Adapter 调用,思想是采用工厂和构建者方式获取 Adapter 避免代码中定义大量的 Adapter 类。该项目在 BRVAH 的 Ada

ShouHeng 17 Oct 9, 2022
RecyclerView With No Adapter | Available For Jetpack Compose

About This Project Available on Google Dev Library Click Here RecyclerView No Adapter (Adapter Has Been Handled) RecyclerView No Adapter Using ViewBin

Faisal Amir 142 Oct 18, 2022
Easy RecyclerView Adapter

GenericAdapter Easy RecyclerView Adapter Getting started build.gradle allprojects { repositories { // ... maven { url 'https://jit

JaredDoge 4 Dec 3, 2021
Just another one easy-to-use adapter for RecyclerView :rocket:

Elementary RecyclerView Adapter Another one easy-to-use adapter for RecyclerView ?? Features: DSL-like methods for building adapters similar to Jetpac

Roman Andrushchenko 29 Jan 6, 2023
A RecyclerView that implements pullrefresh and loadingmore featrues.you can use it like a standard RecyclerView

XRecyclerView a RecyclerView that implements pullrefresh , loadingmore and header featrues.you can use it like a standard RecyclerView. you don't need

XRecyclerView 5.3k Dec 26, 2022
ANDROID. ChipsLayoutManager (SpanLayoutManager, FlowLayoutManager). A custom layout manager for RecyclerView which mimicric TextView span behaviour, flow layouts behaviour with support of amazing recyclerView features

ChipsLayoutManager This is ChipsLayoutManager - custom Recycler View's LayoutManager which moves item to the next line when no space left on the curre

Oleg Beloy 3.2k Dec 25, 2022
A RecyclerView that implements pullrefresh and loadingmore featrues.you can use it like a standard RecyclerView

XRecyclerView a RecyclerView that implements pullrefresh , loadingmore and header featrues.you can use it like a standard RecyclerView. you don't need

XRecyclerView 5.3k Dec 26, 2022
Carousel Recyclerview let's you create carousel layout with the power of recyclerview by creating custom layout manager.

Carousel Recyclerview let's you create carousel layout with the power of recyclerview by creating custom layout manager.

Jack and phantom 504 Dec 25, 2022
RecyclerView : SleepQualityTracker with RecyclerView app

RecyclerView - SleepQualityTracker with RecyclerView app SleepQualityTracker with RecyclerView This app builds on the SleepQualityTracker developed pr

Kevin 2 May 14, 2022
TikTok-RecyclerView - This is a demo app built using 'Koin' a new dependency injection framework for Android along with RecyclerView and ExoPlayer2.

TikTok-RecyclerView Demo About This is a demo app built using 'Koin' a new dependency injection framework for Android along with RecyclerView and ExoP

Baljeet Singh 19 Dec 28, 2022
Pagination-RecyclerView - Simple and easy way to Paginating a RecyclerView

Pagination-RecyclerView Simple and easy way to Paginating a RecyclerView Android

Rakshit Nawani 0 Jan 3, 2022
An adapter to create Android RecyclerViews with sections, providing headers and footers.

⚠ This library is no longer maintained ⚠️ SectionedRecyclerView An adapter to create Android RecyclerViews with sections, providing headers and footer

Tomás Ruiz-López 809 Dec 21, 2022
Yet another adapter delegate library.

Yet another adapter delegate library. repositories { ... maven { url 'https://jitpack.io' } } ... dependencies { implementation("com.git

Mike 10 Dec 26, 2022