[] Easy Adapters library for Android

Related tags

Adapter easy-adapter
Overview

Deprecated

Due to the growing use of the RecyclerView and the RecyclerView.Adapter provided adapter class, Easy-Adapter is now deprecated. Whilst the current version still remains usable, there will no longer be any new development taking place.

EasyAdapter For Android

Using ListView and RecyclerView has never been so easy. Inspired by the view holder design pattern, this library provides an easier way of linking ListView and RecyclerView with the underlying data for that view without having to implement your own Adapter. EasyAdapter will do the tedious work for you.

Why to use EasyAdapter?
  • Simpler than implementing your own Adapter. You just have to extend ItemViewHolder and use annotations to link your code to views and layouts. See examples below or demo app.
  • Ensure performance. It reuses the view holders so helps your ListViews scroll smoothly.
  • Easy to switch between ListView and RecyclerView. Once you implement your ItemViewHolder this can be used with both widgets. By just changing a couple of lines you can easily switch between a ListView and a RecyclerView.
  • Cleaner code. By keeping the view fields inside the view holders your code becomes cleaner an more understandable.

EasyAdapter supports Android 2.1 and above.

Setup

1. Gradle

dependencies {
    compile 'uk.co.ribot:easyadapter:1.5.0@aar'
}

2. Maven

<dependency>
    <groupId>uk.co.ribot</groupId>
    <artifactId>easyadapter</artifactId>
    <version>1.5.0</version>
    <type>aar</type>
</dependency>

3. Manual

Download the latest Jar

Sample

This example shows how to implement a ListView and a RecyclerView that displays a list of people. Every item on the list is a person with an image, name and phone number. The item's layout is person_item_layout.xml and it contains an ImageView and two TextViews. The Person class contains data about a person.

1. Extend ItemViewHolder

//Annotate the class with the layout ID of the item.
@LayoutId(R.layout.person_item_layout)
public class PersonViewHolder extends ItemViewHolder<Person> {

    //Annotate every field with the ID of the view in the layout.
    //The views will automatically be assigned to the fields.
    @ViewId(R.id.image_view_person)
    ImageView imageViewPerson;

    @ViewId(R.id.text_view_name)
    TextView textViewName;

    @ViewId(R.id.text_view_phone)
    TextView textViewPhone;

    //Extend ItemViewHolder and call super(view)
    public PersonViewHolder(View view) {
        super(view);
    }

    //Override onSetValues() to set the values of the items in the views.
    @Override
    public void onSetValues(Person person, PositionInfo positionInfo) {
        imageViewPerson.setImageResource(person.getResDrawableId());
        textViewName.setText(person.getName());
        textViewPhone.setText(person.getPhoneNumber());
    }
}

If you define the ViewHolder as an inner class, it must be static so that the EasyAdapter can instantiate it.

2. Link the view holder to your ListView or RecyclerView

ListView
/*
Create an EasyAdapter by passing a Context, your ItemViewHolder class and the list of items.
Alternatively, you can create an EasyAdapter only with a Context and an ItemViewHolder class and set
the list of items later on.
*/
mListView.setAdapter(new EasyAdapter<Person>(
        this,
        PersonViewHolder.class,
        DataProvider.getListPeople()));
RecyclerView
//Same as above but use a EasyRecyclerAdapter instead of EasyAdapter
mRecyclerView.setAdapter(new EasyRecyclerAdapter<Person>(
        this,
        PersonViewHolder.class,
        DataProvider.getListPeople()));

See demo app for a full working example.

Pass a callback or listener to the view holder.

Sometimes you need to notify your Activity or Fragment about an action that happened in your view holder, for example, you need to set the title of the Activity when a button that is in the view holder is clicked. From version 1.4.+ this is quite easy to implement by passing a listener or callback to the view holder through the adapter. See the example below:

In your Activity create an easy adapter with a listener.
//Implement the listener. 
private PersonViewHolder.PersonListener mListener = new PersonViewHolder.PersonListener() {
    public onButtonClicked(Person person) {
        setTitle(person.getName());
    }
}

//Set the listener when creating the EasyRecyclerAdapter (same for EasyAdapter)
mRecyclerView.setAdapter(new EasyRecyclerAdapter<Person>(
        this,
        PersonViewHolder.class,
        DataProvider.getListPeople(),
        mListener));
Get your listener from the ItemViewHolder
@LayoutId(R.layout.person_item_layout)
public class PersonViewHolder extends ItemViewHolder<Person> {

    @ViewId(R.id.button)
    Button button;
    
    //Implement onSetListeners and set a click listener in the button.  
    @Override
    public void onSetListeners() {
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Get your custom listener and call the method. 
                PersonListener listener = getListener(PersonListener.class);
                if (listener != null) {
                    listener.onButtonClicked(getItem());
                }
            }
        }
    }
    
    //Define your custom interface 
    public interface PersonListener {
        public void onButtonClicked(Person person);
    }
}

Proguard

If you are using Proguard you need to add the following rules to proguard-rules.pro:

-keepattributes *Annotation*
-keepclassmembers class * extends uk.co.ribot.easyadapter.ItemViewHolder {
    public <init>(...);
 }

Build

The demo app
./gradlew :demo:installDebug
The library
./gradlew :library:build

License

Copyright 2014 Ribot Ltd.

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
  • Error

    Error "The ItemViewHolder class passed into the EasyAdapter is not valid, make sure it extends ItemViewHolder."

    What's wrong with my code?

    I get the following error:

    '05-21 12:20:26.893: E/AndroidRuntime(3300): uk.co.ribot.easyadapter.InvalidViewHolderException: The ItemViewHolder class passed into the EasyAdapter is not valid, make sure it extends ItemViewHolder.'

    And my code look like this:

    EasyAdapter adapter = new EasyAdapter<Debate>(getActivity(), DebateViewHolder.class, itemList);
            list.setAdapter(adapter);
    
    @LayoutId(R.layout.item_debate)
        public class DebateViewHolder extends ItemViewHolder<Debate> {
    
            @ViewId(R.id.title)
            TextView title;
    
            @ViewId(R.id.username)
            TextView username;
    
            @ViewId(R.id.date_human)
            TextView date_human;
    
            @ViewId(R.id.comments_count)
            TextView comments_count;
    
            public DebateViewHolder(View view) {
                super(view);
            }
    
            @Override
            public void onSetValues(Debate item, PositionInfo positionInfo) {
                title.setText(item.title);
                username.setText(item.username);
            }
        }
    
    opened by devloe 7
  • Feature listener support

    Feature listener support

    This pull requests adds a new parameter to the easy adapter constructors so now it's possible to pass a generic Object to the ItemViewHolder through the Adapter. This allows to pass a listener into the ItemViewHolder that then can be get and called when an action happens, i.e click on a view.

    The ItemViewHolder also providers a method getListener(Class type) that casts the listener Object to the desired type and retruns it.

    This new argument is optional so it won't cause any breaking changes.

    opened by ivacf 6
  • Custom Component

    Custom Component

    I have this:

    @LayoutId(R.layout.item_comment)
    public class CommentViewHolder extends ItemViewHolder<Debate> {
    

    What if I have a custom component that extends LinearLayout and is in charge of inflating and populating the R.layout.item_comment?

    I use this to place a "comment" into a layout:

    <com.example.testapp.components.CommentItem 
                            android:id="@+id/comment"
                            android:layout_width="fill_parent"
                            android:layout_height="fill_parent"
                        />
    

    Is there a way to use a custom component with a view holder?

    Hope I explained my situation in a way you can understand.

    Here's an explanation of what I'm trying to do I think: http://blog.xebia.com/2013/07/22/viewholder-considered-harmful/

    opened by devloe 6
  • Feature extra adapter methods

    Feature extra adapter methods

    Add extra methods to EasyAdapter and EasyRecyclerAdapter:

    • getItems(): will return the underlying List of data items so provides more flexibility to interact with the Adapter.
    • removeItem(T item): Removes a given item from the adapter and refreshes the AdapterView or RecyclerView
    • removeItems(Collection items): Same as above but for a collection of items.
    • addItems(Collection items): Add a collection of items and refreshes the AdapterView or RecyclerView
    • setItemsWithoutNotifying(List): same as setItems(List) but this method does not call notifyDataSetChanged()

    Also add unit tests for all the methods in EasyAdapter and EasyRecyclerAdapter.

    opened by ivacf 3
  • Update dependencies and test framework

    Update dependencies and test framework

    • Update project dependencies to latest version
    • Move to robolectric 3.0 and official unit test support
    • Rewrite demo app functional tests in Espresso and remove Robotium.
    opened by ivacf 3
  • OnItemClickListener not recognized when using the EasyAdapter for normal ListView.

    OnItemClickListener not recognized when using the EasyAdapter for normal ListView.

    With this version 1.3 it looks as dough onItemClickListener doesn't work anymore. Could the support for RecyclerView have influenced this. Please see: http://stackoverflow.com/questions/24885223/why-doesnt-recyclerview-have-onitemclicklistener

    opened by greenspand 3
  • EasyAdapter in Marshmallow

    EasyAdapter in Marshmallow

    When try to open app using EasyAdapter in api 23 Marshmallow this bugs is show

    FATAL EXCEPTION: main Process: au.app, PID: 13866 java.lang.RuntimeException: java.lang.IllegalAccessException: java.lang.Class<au.app.activity.DateDashBoardViewHolder> is not accessible from java.lang.Class<uk.co.ribot.easyadapter.EasyAdapterUtil> at uk.co.ribot.easyadapter.EasyAdapterUtil.createViewHolder(EasyAdapterUtil.java:18) at uk.co.ribot.easyadapter.BaseEasyRecyclerAdapter.onCreateViewHolder(BaseEasyRecyclerAdapter.java:76) at uk.co.ribot.easyadapter.BaseEasyRecyclerAdapter.onCreateViewHolder(BaseEasyRecyclerAdapter.java:34) at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5228) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4453) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4363) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961) at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3071) 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.layoutHorizontal(LinearLayout.java:1732) at android.widget.LinearLayout.onLayout(LinearLayout.java:1497) 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.layoutHorizontal(LinearLayout.java:1732) at android.widget.LinearLayout.onLayout(LinearLayout.java:1497) 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.layoutHorizontal(LinearLayout.java:1732) at android.widget.LinearLayout.onLayout(LinearLayout.java:1497) 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.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.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 android.widget.ScrollView.onLayout(ScrollView.java:1525) 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

    opened by MohammedHassouna 2
  • Bypass injections with manual calls to support usage in libraries

    Bypass injections with manual calls to support usage in libraries

    Is that somehow possible? If I want to write some reuseable adapters in a library, this is not possible, because in libraries I do not have stable resource ids.

    So the solution is to do what @LayoutId, @LayoutId and @ViewId does manually.

    Is that somehow possible? Actually I can't find a way for replacing @LayoutId, the rest is not the problem I think...

    opened by MFlisar 2
  • Cannot build

    Cannot build

    I cannot build your project. I keep getting the error: Error:Could not find property 'processManifest' on com.android.build.gradle.internal.api.LibraryVariantImpl_Decorated@4179146c.

    opened by IgorGanapolsky 2
  • RecyclerView support

    RecyclerView support

    • Implements BaseEasyRecyclerAdapter and EasyRecyclerAdapter so that now we can use easyadapter with RecyclerViews in the same way as ListViews!!
    • Update target SDK and build tools to version 21
    • Update demo app so now it shows two tabs, one with a ListView and one with a RecyclerView ( both using the same ItemViewHolder )
    • Update Robotium tests and Travis Ci config.
    opened by ivacf 2
  • Passing a Context to ViewHolder class

    Passing a Context to ViewHolder class

    I don't know if this is the right place to ask this.

    Is there a way to pass a context to the SomethingViewHolder class in order to for instance adding an image dynamically?

    Something like this?

    public DebateViewHolder(View view, Context c) {
            super(view);
            this.context = c;
        }
    

    Thanks.

    opened by devloe 2
  • Endless Scrolling Feature Request

    Endless Scrolling Feature Request

    So I have been using easy-adapter quite a lot lately and I have really come to like it.

    One thing I have tried to implement while still keeping the view holders is endless loading.

    It seems pretty simple, the only issue I had was that I could not override the onCreateViewHolder in order to show the loading sign, because the static RecyclerViewHolder class is private.

    have a look at the following link: http://android-pratap.blogspot.co.za/2015/06/endless-recyclerview-with-progress-bar.html

    Would be a great feature to add to the adapter,

    I would suggest leaving the feature out of the default constructor, but maybe call a setEndlessScrolling(OnLoadMoreCallback, numberOfItemsToShow);

    opened by Zapnologica 0
  • On Item Click listener

    On Item Click listener

    How would one pass a onClickListener to the adapter for when the View (parent) or entire ViewHolder is selected.

    In your example you only show how to add a onClickListener to a button within the View Holder.

    I want to know when a user clicks on an Item in the recyclerView and have the item Passed through to the onclick event.

    question 
    opened by Zapnologica 1
  • More arguments for the constructor of the ViewHolder class?

    More arguments for the constructor of the ViewHolder class?

    Hi, I can't seem to figure out how to access a variable or function of the fragment containing my ViewHolder class.

    Since the constructor has to have a single View parameter, how can I access my fragment in my (static) ViewHolder implementation?

    Thank you for the work!

    opened by janoliver 1
  • Custom Item Animation

    Custom Item Animation

    I want to implement a button press and release animation. Therefore, I add the animations in onSetListeners.

    I call clearAnimation in onBindView but still I have problems. The views sometimes stay on top of the RecyclerView and then the stay there forever. I think this comes from the RecyclerView animation handling. I'm really not sure how to solve that, but maybe public boolean onFailedToRecycleView (VH holder) is the place to call clearAnimations on the view instead of the onBind. But I just can't override this function from the BaseEasyRecyclerAdapter as the ViewHolder is not public.

    Can I somehow do what I want? Maybe you even know better where the problem comes from and have some tipp for me?

    opened by MFlisar 0
  • Support for databinding in list view items

    Support for databinding in list view items

    First off, thanks for this library.

    I was wondering what would be the best way to add support for databinding when using an ItemViewHolder with a recyclerview (or listview). I am thinking either making the onCreateViewHolder abstract, and creating two base classes, depending on whether one is using the databinding or not. The problem with this solution is that it would double the number of classes one can subclass.

    What about adding a flag to the LayoutId annotation set to true when using databinding, and is false by default?

    Thanks,

    enhancement 
    opened by anas-ambri 3
Releases(1.5.0)
  • 1.5.0(Jun 10, 2015)

    Add new methods to EasyAdapter and EasyRecyclerAdapter:

    • getItems(): Access the underlying List of data items so there is more flexibility to interact with the Adapter.
    • removeItem(T item): Removes a given item from the adapter and refreshes the AdapterView or RecyclerView
    • removeItems(Collection items): Same as above but for a collection of items.
    • addItems(Collection items): Add a Collection of items and refreshes the AdapterView or RecyclerView
    • setItemsWithoutNotifying(List): Same as setItems(List) but this method does not call notifyDataSetChanged()
    Source code(tar.gz)
    Source code(zip)
    easyadapter-1.5.0.jar(20.03 KB)
  • 1.4.0(Dec 19, 2014)

    • Improves the way that exceptions are handled.
    • Adds the option to pass a generic Object to the ItemViewHolder through the easy adapters constructor. This new argument called listener is intented to pass an implementation of an interface to the view holder that then can be used as a callback to notify Activities or Fragments of an action, i.e one of the views in the list has been clicked.
    Source code(tar.gz)
    Source code(zip)
  • 1.3.0(Nov 5, 2014)

  • 1.2.0(Sep 11, 2014)

    Refactor EasyAdapter, move getView() implementation to an abstract BaseEasyAdapter to allow the implementation of custom easy adapters with different data structures.

    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Jul 7, 2014)

    Performance improvements. Now onSetListeners() is only called once when the ItemViewHolder is created. This introduces breaking changes because now onSetListeners() doesn't have any parameters.

    Source code(tar.gz)
    Source code(zip)
  • 1.0.1(Apr 14, 2014)

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
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
Generate data-view-binding adapters of android recycler view.

Items 这个库可以为 Android 的 RecyclerView 生成基于 Data-View-Binding 的 Adapter。 对比其他一些类似的开源库,它有以下的一些优势: 更好的拓展性。这个库不需要你继承特定的 Adapter 或 ViewHolder 类,你可以继承任何第三方提供的

nekocode 253 Nov 11, 2022
Just like instant coffee, saves 78% of your time on Android's Custom Adapters.

Notice Instant Adapter is now part of an even more awesome Adapter Kit project! Instant Adapter Just like instant coffee, saves 78%* of your time on A

Ragunath Jawahar 232 Nov 25, 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
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
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
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
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
This library provides GridAdapters(ListGridAdapter & CursorGridAdapter) which enable you to bind your data in grid card fashion within android.widget.ListView, Also provides many other features related to GridListView.

GridListViewAdapters This libarary enables you to implement GridView like card layout within ListView with added capabilites like Paginations, Additio

Biraj Patel 270 Nov 25, 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
Open source routing engine for OpenStreetMap. Use it as Java library or server.

GraphHopper Routing Engine GraphHopper is a fast and memory efficient Java routing engine, released under Apache License 2.0. By default it uses OpenS

GraphHopper 4k Jan 7, 2023
A library to make a mosaic with a preview of multiple images

Preview Image Collection Introduction Preview Image Collection is a library to draw a collage with a number of images like facebook preview album Inst

Agnaldo Pereira 50 Jun 13, 2022
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
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
The powerfull Diff Util in Android Recycler View

DiffUtil The powerfull Diff Util in Android Recycler View What is RecyclerView ? RecyclerView is flexible and efficient version of ListView. It is an

Lloyd Dcosta 1 Sep 30, 2021
This library provides Easy Android ListView Adapters(EasyListAdapter & EasyCursorAdapter) which makes designing Multi-Row-Type ListView very simple & cleaner, It also provides many useful features for ListView.

EasyListViewAdapters Whenever you want to display custom items in listview, then only way to achieve this is to implement your own subclass of BaseAda

Biraj Patel 132 Nov 25, 2022
A simple and easy adapter for RecyclerView. You don't have to make adapters and view holders anymore. Slush will help you.

한국어 No more boilerplate adapters and view holders. Slush will make using RecyclerView easy and fast. The goal of this project is to make RecyclerView,

SeungHyun 26 Sep 13, 2022
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