An Adapter that allows a RecyclerView to be split into Sections with headers and/or footers. Each Section can have its state controlled individually.

Overview

⚠️ Archived: this repository is no longer going to be maintained.

SectionedRecyclerViewAdapter

An Adapter that allows a RecyclerView to be split into Sections with headers and/or footers.

Version Total Downloads Build Status codecov Android Arsenal

Linear Grid

In addition, each Section can have its state(Loading/Loaded/Failed/Empty) controlled individually.

Loading Loaded


Gradle Dependency

Add this to the dependencies section in your project-level build.gradle file:

implementation 'io.github.luizgrp.sectionedrecyclerviewadapter:sectionedrecyclerviewadapter:x.y.z'

Guide to upgrade to version 3.x here.

Latest version without AndroidX: 1.2.0.

Basic usage

1) Create a custom Section class:
class MySection extends Section {
    List<String> itemList = Arrays.asList("Item1", "Item2", "Item3");

    public MySection() {
        // call constructor with layout resources for this Section header and items
        super(SectionParameters.builder()
                .itemResourceId(R.layout.section_item)
                .headerResourceId(R.layout.section_header)
                .build());
    }

    @Override
    public int getContentItemsTotal() {
        return itemList.size(); // number of items of this section
    }

    @Override
    public RecyclerView.ViewHolder getItemViewHolder(View view) {
        // return a custom instance of ViewHolder for the items of this section
        return new MyItemViewHolder(view);
    }

    @Override
    public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) {
        MyItemViewHolder itemHolder = (MyItemViewHolder) holder;

        // bind your view here
        itemHolder.tvItem.setText(itemList.get(position));
    }
    
    @Override
    public RecyclerView.ViewHolder getHeaderViewHolder(View view) {
        // return an empty instance of ViewHolder for the headers of this section
        return new EmptyViewHolder(view);
    }
}
2) Create a custom ViewHolder for the section items:
class MyItemViewHolder extends RecyclerView.ViewHolder {
    private final TextView tvItem;

    public MyItemViewHolder(View itemView) {
        super(itemView);

        tvItem = (TextView) itemView.findViewById(R.id.tvItem);
    }
}
3) Set up your RecyclerView with the SectionedRecyclerViewAdapter:
// Create an instance of SectionedRecyclerViewAdapter
SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter();

// Add your Sections
sectionAdapter.addSection(new MySection());

// Set up your RecyclerView with the SectionedRecyclerViewAdapter
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(sectionAdapter);

Demo app

You can find a demo app here with many examples on how to implement:

Demo

Apps on Google Play using this library

License

The MIT License (MIT)

Copyright (c) 2016 Gustavo Pagani

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Comments
  • Add support for multiple view holders in a given section

    Add support for multiple view holders in a given section

    Would it be possible to implement something like RecyclerView.Adapter's public int getItemViewType(int position) to allow one to define logic for loading different view holders in a given section?

    enhancement wontfix 
    opened by kevinwo 21
  • Fatal Exception: java.util.ConcurrentModificationException while adding sections

    Fatal Exception: java.util.ConcurrentModificationException while adding sections

    Hi,

    I use your library for my app's main screen. I get data from our server with asynctask(via okhttp) and i add sections in this tasks. I update adapter using either notifyDataSetChanged or notifyItemRangeInserted. But sometimes i get following exception. Can you suggest me anything to fix this problem? Thank you.

    Fatal Exception: java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787) at java.util.HashMap$EntryIterator.next(HashMap.java:824) at java.util.HashMap$EntryIterator.next(HashMap.java:824) at io.github.luizgrp.sectionedrecyclerviewadapter.SectionedRecyclerViewAdapter.onCreateViewHolder(SectionedRecyclerViewAdapter.java:43) at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6367) at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5555) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224) at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:556) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595) at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844) at android.view.View.layout(View.java:17050) at android.view.ViewGroup.layout(ViewGroup.java:5579) at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:636) at android.view.View.layout(View.java:17050) at android.view.ViewGroup.layout(ViewGroup.java:5579) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1189) at android.view.View.layout(View.java:17050) at android.view.ViewGroup.layout(ViewGroup.java:5579) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396) at android.widget.FrameLayout.onLayout(FrameLayout.java:333) at android.view.View.layout(View.java:17050) at android.view.ViewGroup.layout(ViewGroup.java:5579) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1189) at android.view.View.layout(View.java:17050) at android.view.ViewGroup.layout(ViewGroup.java:5579) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396) at android.widget.FrameLayout.onLayout(FrameLayout.java:333) at android.view.View.layout(View.java:17050) at android.view.ViewGroup.layout(ViewGroup.java:5579) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:2001) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1844) at android.widget.LinearLayout.onLayout(LinearLayout.java:1753) at android.view.View.layout(View.java:17050) at android.view.ViewGroup.layout(ViewGroup.java:5579) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396) at android.widget.FrameLayout.onLayout(FrameLayout.java:333) at android.view.View.layout(View.java:17050) at android.view.ViewGroup.layout(ViewGroup.java:5579) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:2001) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1844) at android.widget.LinearLayout.onLayout(LinearLayout.java:1753) at android.view.View.layout(View.java:17050) at android.view.ViewGroup.layout(ViewGroup.java:5579) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396) at android.widget.FrameLayout.onLayout(FrameLayout.java:333) at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2794) at android.view.View.layout(View.java:17050) at android.view.ViewGroup.layout(ViewGroup.java:5579) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2568) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2268) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1335) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6804) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:894) at android.view.Choreographer.doCallbacks(Choreographer.java:696) at android.view.Choreographer.doFrame(Choreographer.java:631) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:880) at android.os.Handler.handleCallback(Handler.java:815) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5902) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:948) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:809)

    wontfix 
    opened by erenbakac 20
  • Alternative to sectionAdapter.notifyDataSetChanged

    Alternative to sectionAdapter.notifyDataSetChanged

    Most of the time, whenever there are background threads performing

    • Change Section state from LOADING to EMPTY
    • Change Section state from LOADED to EMPTY
    • setHasHeader(true)/ setHasHeader(false)
    • section.setVisible(true)/ section.setVisible(false)

    I will use sectionAdapter.notifyDataSetChanged, so that visualize effect will take in immediately.

    However, when I implement a complex drag-n-drop/ drag-n-move UX in one of the Sections, I wish to avoid using sectionAdapter.notifyDataSetChanged. The reason is that, if other Section threads call sectionAdapter.notifyDataSetChanged, it will break my Watchlist section drag-n-drop/ drag-n-move UX effect.

    a

    After experimenting, I had came out with the following code to replace sectionAdapter.notifyDataSetChanged

    if (orders.isEmpty()) {
        orderSection.setState(Section.State.EMPTY);
    
        if (orderSection.hasHeader()) {
            int headerPosition = sectionAdapter.getHeaderPositionInAdapter(orderSection);
            orderSection.setHasHeader(false);
            sectionAdapter.notifyItemRemovedFromSection(orderSection, headerPosition);
        }
    
        // I think this works fine, if it changed from LOADING TO EMPTY. But,
        // what if it changed from LOADED (More than 1 item) to EMPTY? Does the
        // following code still work fine?
        sectionAdapter.notifyItemRangeChangedInSection(
                orderSection,
                0,
                1
        );
    } else {
        orderSection.updateOrders(orders);
        if (!orderSection.hasHeader()) {
            orderSection.setHasHeader(true);
            sectionAdapter.notifyHeaderChangedInSection(orderSection);
        }
        
        if (orderSection.getState() != Section.State.LOADED) {
            orderSection.setState(Section.State.LOADED);
        }
    
        sectionAdapter.notifyItemRangeChangedInSection(
                orderSection,
                0,
                orderSection.getContentItemsTotal()
        );
    }
    
    1. When I hide header, I use notifyItemRemovedFromSection
    2. When I show header, I use notifyHeaderChangedInSection
    3. When I change State from LOADING to EMPTY, I use notifyItemRangeChangedInSection, with item count is 1.
    4. When I change State from X to LOADED, I use notifyItemRangeChangedInSection, with item count is Section.getContentItemsTotal().

    Do you think the above is a good way, so that our update operation is capped at Section level, and doesn't spread to other Section?

    What other notification way I can use, if I have the following case?

    1. When section.setVisible(true)/ section.setVisible(false)
    2. When I change State from LOADED to EMPTY ?

    Thanks.

    enhancement question 
    opened by yccheok 18
  • Does it make sense to provide notifyItemChangedInHeader and notifyItemChangedInFooter

    Does it make sense to provide notifyItemChangedInHeader and notifyItemChangedInFooter

    I was wondering, does it make sense, to provide the following methods

    notifyItemChangedInHeader(String TAG)
    notifyItemChangedInHeader(Section section)
    notifyItemChangedInFooter(String TAG)
    notifyItemChangedInFooter(Section section)
    

    Currently, I have the following use case.

    small

    For the following 3 components, they are belongs to single item in single section

    • price (968.99) as same Item within same Section
    • chart as same Item within same Section
    • buttons (buy & sell) as same Item within same Section

    So, whenever there are changes in price or buttons, I need to call notifyItemChangedInItem. However, chart drawing is an expensive activity. Calling notifyItemChangedInItem will cause unnecessary chart re-drawing. My current workaround is to keep a special position flag, to prevent unnecessary chart re-drawing.

    My ideal way is to place

    • price (968.99) as Header within same Section
    • chart as Item within same Section
    • buttons (buy & sell) as Footer within same Section

    So, whenever there are changes in price or buttons, I just need to call notifyItemChangedInHeader or notifyItemChangedInFooter, without trigger chart as item.

    If such changes make sense, I'm more to happy to send another pull request for that.

    Thank you.

    enhancement 
    opened by yccheok 11
  • It is possible to write a guideline on how to use DiffUtil.Callback with SectionedRecyclerViewAdapter?

    It is possible to write a guideline on how to use DiffUtil.Callback with SectionedRecyclerViewAdapter?

    Hi,

    Now, many Android communities recommend to use DiffUtil when dealing with RecyclerView

    https://medium.com/@iammert/using-diffutil-in-android-recyclerview-bdca8e4fbb00

    Is it possible to write a guideline, on how to use DiffUtil with SectionedRecyclerViewAdapter? As, I still struggling to get DiffUtil to work with SectionedRecyclerViewAdapter.

    Thank you.

    question 
    opened by yccheok 9
  • Why is gradle complaining about not finding appcompat-v7.jar?

    Why is gradle complaining about not finding appcompat-v7.jar?

    so I'm adding the library as a depency like this:

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:24.1.1'
        compile 'com.android.support:design:24.1.1'
        ...
        compile 'io.github.luizgrp.sectionedrecyclerviewadapter:sectionedrecyclerviewadapter:1.0.4'
    }
    
    

    But when trying to sync the project with Gradle, I get this:

    Warning:Module 'com.android.support:appcompat-v7:24.1.1' depends on one or more Android Libraries but is a jar
    Error:A problem occurred configuring project ':app'.
    > Could not find appcompat-v7.jar (com.android.support:appcompat-v7:24.1.1).
      Searched in the following locations:
          https://jcenter.bintray.com/com/android/support/appcompat-v7/24.1.1/appcompat-v7-24.1.1.jar
    
    

    I know that the problem is caused by the library, because when I delete that line the project syncs successfully.

    This is the full app/build.gradle file:

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 24
        buildToolsVersion "24.0.1"
    
        defaultConfig {
            applicationId "com.boel.demorv"
            minSdkVersion 15
            targetSdkVersion 24
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:24.1.1'
        compile 'com.android.support:design:24.1.1'
        compile 'com.android.support:cardview-v7:24.1.1'
        compile 'com.google.code.gson:gson:2.7'
        compile 'com.google.android.gms:play-services-maps:9.4.0'
        compile 'io.github.luizgrp.sectionedrecyclerviewadapter:sectionedrecyclerviewadapter:1.0.4'
    }
    

    So, why is gradle complaining about not finding appcompat-v7.jar in https://jcenter.bintray.com/com/android/support/appcompat-v7/24.1.1/appcompat-v7-24.1.1.jar?

    Thanks in advance! I really want to use this library.

    invalid 
    opened by lucas-dev 7
  • Is it possible to support Paging concept introduced in recent year?

    Is it possible to support Paging concept introduced in recent year?

    • [x] I have verified there are no duplicate open or recent questions.
    • [x] I have read over the documentation, checked out the examples and the demo app.
    • [x] I have given my issue a non-generic title.
    • [x] I understand that if I ask the same question in stackoverflow website I will get answers way faster as more people will try to answer it.
    • [x] I understand that if I don't show a minimum effort of what I have tried and where I got stuck the question will be closed and marked as invalid.
    • [x] I have read the article How do I ask a good question?
    • [x] I understand that this library is a custom Adapter and NOT a custom RecyclerView. I understand the difference between them and what is possible to be done in an Adapter but not in a RecyclerView.

    I really like the addSection concept provided by this library.

    In recent year, Google introduced Paging concept. Instead of having to load entire data from database into memory, then present it in RecyclerView. User can now choose to only load a very small subset of data, during RecyclerView scrolling.

    Google achieves so by introducing

    • https://developer.android.com/reference/android/arch/paging/PagedListAdapter
    • LiveData<PageList<...>> returned by Room DB

    The key concept, is to call submitList in PagedListAdapter, whenever the new subset of data is available, during scrolling.

    A nice introduction video during Google I/O 2018 is available - https://www.youtube.com/watch?v=BE5bsyGGLf4

    Currently, I cannot see a direct way, how we can fit such submitList paging concept, into SectionedRecyclerViewAdapter.

    I was wondering, do you have any idea how we can achieve Section concept, yet able to provide paging capability?

    Thank you.

    enhancement help wanted wontfix 
    opened by yccheok 6
  • Error build after implementing library version 2.1.0

    Error build after implementing library version 2.1.0

    Dear Supporters,

    I want to use this library on my project, but after I implementation the library version 2.1.0 as below:

    implementation 'io.github.luizgrp.sectionedrecyclerviewadapter:sectionedrecyclerviewadapter:2.1.0'

    Then I ran my project and I got an error:

    :app:transformClassesWithMultidexlistForDebug FAILED

    FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':app:transformClassesWithMultidexlistForDebug'.

    com.android.build.api.transform.TransformException: Error while generating the main dex list.

    • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

    • Get more help at https://help.gradle.org

    BUILD FAILED in 4s

    This is my build tool of my project: android { compileSdkVersion 28 buildToolsVersion '28.0.3' defaultConfig { multiDexEnabled true minSdkVersion 19 targetSdkVersion 26 } SectionedRecyclerViewAdapter library:

    • Version: 2.1.0

    Could you please help me to resolve this issue?

    Thanks in advance.

    invalid 
    opened by MathiewNguyen 6
  • Add onBind*ViewHolder methods with payloads parameter

    Add onBind*ViewHolder methods with payloads parameter

    • [x] I understand that if I don't use one of the following templates the issue will be closed and marked as invalid.

    PR TEMPLATE

    Use Case

    Add onBind*ViewHolder methods with payloads parameter to Section and StatelessSection classes so it can be handled appropriately when the notify methods with payload parameter are called.

    Design

    • In SectionedRecyclerViewAdapter:

    Override onBindViewHolder(RecyclerView.ViewHolder holder, int position, List payloads) to call onBind*ViewHolder with the payloads parameter, reusing the code from onBindViewHolder(RecyclerView.ViewHolder holder, int position). It should call super if payloads is empty. References: this message from Yigit in this article. Examples here and here.

    • In Section and StatelessSection:

      • For every onBind*ViewHolder method, add a correspondent one with the payloads parameter;
      • Make onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) non abstract.
    • Add unit tests.

    • Add sample in demo app.

    How to use

    Same usage as normal notify* and onBindViewHolder methods with payload as parameter from RecyclerView.Adapter.

    enhancement  opened by luizgrp 6
  • When using regular adapter normal RecyclerView works in a Fragment, but only the Section Header displays with SectionedRecyclerView.

    When using regular adapter normal RecyclerView works in a Fragment, but only the Section Header displays with SectionedRecyclerView.

    I have created a Section and a custom ItemViewHolder according to your ReadMe, but unable to get more than the header to display when switching from mAdapter to sectionedAdapter.

    invalid question 
    opened by apowell656 6
  • Is using Section as HashMap key a good design?

    Is using Section as HashMap key a good design?

    I have been using version 1.2.0 for several years.

    I tries to start a new project with version 3.1.0

    I notice there are some significant design change especially

    https://github.com/luizgrp/SectionedRecyclerViewAdapter/blob/master/library/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/SectionedRecyclerViewAdapter.java#L36

    My question is, is using Section abstract class as HashMap key a good design? What if, the child of Section, override hashCode and equals method?

    Thanks.

    enhancement 
    opened by yccheok 5
  • Releases(v3.2.0)
    Owner
    Gustavo Pagani
    Gustavo Pagani
    Rx based RecyclerView Adapter

    RxRecyclerAdapter Rx based generic RecyclerView Adapter Library. How to use it? Example! Enable Databinding by adding these lines to your build.gradle

    Ahmed Rizwan 193 Jun 18, 2022
    This Repository simplifies working with RecyclerView Adapter

    AutoAdapter This Repository simplifies working with RecyclerView Adapter Gradle: Add it in your root build.gradle at the end of repositories: allproj

    George Dzotsenidze 151 Aug 15, 2021
    Generic RecyclerView adapter

    Generic RecyclerView Adapter. Lightweight library which simplifies creating RecyclerView adapters and illuminates writing boilerplate code. Creating a

    Leonid Ustenko 77 Dec 24, 2022
    Android library for the adapter view (RecyclerView, ViewPager, ViewPager2)

    Antonio Android library for the adapter view (RecyclerView, ViewPager, ViewPager2) Free from implementation of the adapter's boilerplate code ! Reuse

    NAVER Z 106 Dec 23, 2022
    Small, smart and generic adapter for recycler view with easy and advanced data to ViewHolder binding.

    smart-recycler-adapter Never code any boilerplate RecyclerAdapter again! This library will make it easy and painless to map your data item with a targ

    Manne Öhlund 405 Dec 30, 2022
    The bullet proof, fast and easy to use adapter library, which minimizes developing time to a fraction...

    FastAdapter The FastAdapter is here to simplify creating adapters for RecyclerViews. Don't worry about the adapter anymore. Just write the logic for h

    Mike Penz 3.7k Jan 8, 2023
    Android - A ListView adapter with support for multiple choice modal selection

    MultiChoiceAdapter MultiChoiceAdapter is an implementation of ListAdapter which adds support for modal multiple choice selection as in the native Gmai

    Manuel Peinado Gallego 855 Nov 11, 2022
    A slim & clean & typeable Adapter without# VIEWHOLDER

    PLEASE NOTE, THIS PROJECT IS NO LONGER BEING MAINTAINED First At A Glance :) Intro A slim & clean & typeable Adapter without# VIEWHOLDER Features No V

    lin 940 Dec 30, 2022
    Adapter Kit is a set of useful adapters for Android.

    Adapter Kit Adapter Kit is a set of useful adapters for Android. The kit currently includes, Instant Adapter Instant Cursor Adapter Simple Section Ada

    Ragunath Jawahar 368 Nov 25, 2022
    Simplify Adapter creation for your Android ListViews.

    FunDapter takes the pain and hassle out of creating a new Adapter class for each ListView you have in your Android app. It is a new approach to custom

    Ami Goldenberg 287 Dec 22, 2022
    Epoxy is an Android library for building complex screens in a RecyclerView

    Epoxy Epoxy is an Android library for building complex screens in a RecyclerView. Models are automatically generated from custom views or databinding

    Airbnb 8.1k Jan 4, 2023
    Renderers is an Android library created to avoid all the boilerplate needed to use a RecyclerView/ListView with adapters.

    Renderers Renderers is an Android library created to avoid all the RecyclerView/Adapter boilerplate needed to create a list/grid of data in your app a

    Pedro Vicente Gómez Sánchez 1.2k Nov 19, 2022
    Android library to auto-play/pause videos from url in recyclerview.

    AutoplayVideos Show some ❤️ and star the repo to support the project This library is created with the purpose to implement recyclerview with videos ea

    Krupen Ghetiya 989 Nov 17, 2022
    :page_with_curl: [Android Library] Giving powers to RecyclerView

    Android library that provides most common functions around recycler-view like Swipe to dismiss, Drag and Drop, Divider in the ui, events for when item

    Nishant Srivastava 644 Nov 20, 2022
    Vector map library and writer - running on Android and Desktop.

    Mapsforge See the integration guide and changelog. And read through how to contribute guidelines. If you have any questions or problems, don't hesitat

    mapsforge 1k Jan 2, 2023
    An Adapter that allows a RecyclerView to be split into Sections with headers and/or footers. Each Section can have its state controlled individually.

    ⚠️ Archived: this repository is no longer going to be maintained. SectionedRecyclerViewAdapter An Adapter that allows a RecyclerView to be split into

    Gustavo Pagani 1.7k Dec 21, 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
    Split Food Bill is an android application where user can split the expenses based on the number of people joined the trip. This application is developed using Android's Jetpack Compose

    SplitFoodBill-Compose Split Food Bill is an android application where user can split the expenses based on the number of people joined the trip. This

    Shivaprasad Bhat 1 Jan 17, 2022
    A layout manager for the RecyclerView with interchangeable linear, grid, and staggered displays of views, all with configurable section headers including the sticky variety as specified in the material design docs.

    SuperSLiM This is the version 5 development branch. Project Plan Support me on Patreon Blog What is Version 5 Version 5 is the current development bra

    Tonic Artos 2.1k Jan 2, 2023
    . Android library that integrate sticky section headers in your RecyclerView

    recyclerview-stickyheaders Recyclerview-stickyheaders is an Android library that makes it easy to integrate section headers in your RecyclerView. Thes

    null 968 Nov 10, 2022