RecyclerView With No Adapter | Available For Jetpack Compose

Overview

ScreenShoot Apps

About This Project

Android Arsenal JitPack Medium Badge

  • Available on Google Dev Library Click Here
  • RecyclerView No Adapter (Adapter Has Been Handled)
  • RecyclerView No Adapter Using ViewBinding Adapter
  • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
  • Using Kotlin DSL build.gradle.kts
  • Elegant call using injector()
  • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
  • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

Screen Shoot Apps

Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

Version Release

This Is Latest Release

$version_release = 3.8.8

What's New??

* Update Build Gradle to 7.0.2 *
* Update Frogo Android UI Kit *
* Enhance Performance *
* FrogoRecyclerCompose - FrogoLazyColumn *
* FrogoRecyclerCompose - FrogoLazyRow *
* FrogoRecyclerCompose - FrogoLazyFixedGrid *
* FrogoRecyclerCompose - FrogoLazyAdaptiveGrid *
* Migrate From Groovy to Kotlin DSL *

Compose Tutorial - FrogoRecyclerCompose Click Here

Download this project

Step 1. Add the JitPack repository to your build file (build.gradle : Project)

// Add it in your root build.gradle at the end of repositories:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

// Add it in your root build.gradle.kts at the end of repositories:

allprojects {
    repositories {
        ...
        maven { url = uri("https://jitpack.io") }
    }
}

Step 2. Add the dependency (build.gradle : Module)

dependencies {
    // library frogo-recycler-view
    implementation 'com.github.amirisback:frogo-recycler-view:3.8.8'
}

dependencies {
    // library frogo-recycler-view
    implementation("com.github.amirisback:frogo-recycler-view:3.8.8")
}

Step 3. Create xml view

">
<com.frogobox.recycler.widget.FrogoRecyclerView
    android:id="@+id/frogo_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

Click for detail!
private fun setupFrogoRecyclerView() {

    val adapterCallback = object : IFrogoViewAdapter<ExampleModel> {
        override fun setupInitComponent(view: View, data: ExampleModel) {
            // Init component content item recyclerview
            view.findViewById<TextView>(R.id.tv_example_item).text = data.name
        }

        override fun onItemClicked(data: ExampleModel) {
            // setup item clicked on frogo recycler view
            showToast(data.name)
        }

        override fun onItemLongClicked(data: ExampleModel) {
            // setup item long clicked on frogo recycler view
            showToast(data.name)
        }
    }

    binding.frogoRecyclerView
        .injector<ExampleModel>()
        .addData(listData())
        .addCustomView(R.layout.frogo_rv_list_type_1)
        .addEmptyView(null)
        .addCallback(adapterCallback)
        .createLayoutLinearVertical(false)
        .build()
}

Click for detail!
private fun setupFrogoRecyclerBinding() {

    val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
        override fun setupInitComponent(binding: FrogoRvListType1Binding, data: ExampleModel) {
            binding.frogoRvListType1TvTitle.text = data.name
            val context = binding.root.context
        }

        override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
            return FrogoRvListType1Binding.inflate(LayoutInflater.from(parent.context), parent, false)
        }

        override fun onItemClicked(data: ExampleModel) {
            // setup item clicked on frogo recycler view
            showToast(data.name)
        }

        override fun onItemLongClicked(data: ExampleModel) {
            // setup item long clicked on frogo recycler view
            showToast(data.name)
        }
    }

    binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
        .addData(listDataBinding())
        .addCallback(adapterCallback)
        .createLayoutLinearVertical(false)
        .build()

}

Click for detail!
private fun setupRvBuilder() {
    binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel>{
        override fun setupData(): List<ExampleModel> {
            // Setup data FrogoRecyclerView
            return listData()
        }

        override fun setupCustomView(): Int {
            // Setup Custom View
            return R.layout.frogo_rv_list_type_1
        }

        override fun setupEmptyView(): Int? {
            // Setup Empty View
            return null
        }

        override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
            // Setup Layout Manager of FrogoRecyclerView
            return FrogoLayoutManager.linearLayoutVertical(context)
        }

        override fun setupInitComponent(view: View, data: ExampleModel) {
            // Init component content item recyclerview
            view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
        }

        override fun onItemClicked(data: ExampleModel) {
            // setup item clicked on frogo recycler view
            showToast(data.name)
        }

        override fun onItemLongClicked(data: ExampleModel) {
            // setup item long clicked on frogo recycler view
            showToast(data.name)
        }
    })
}

Click for detail!
private fun setupRvBuilderBinding() {
    binding.frogoRecyclerView.builderBinding(object :
        IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
        override fun setupData(): List<ExampleModel> {
            // Setup data FrogoRecyclerView
            return dataBuilderBinding
        }

        override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
            // Setup Layout Manager of FrogoRecyclerView
            return FrogoLayoutManager.linearLayoutVertical(context)
        }

        override fun setupInitComponent(binding: FrogoRvListType1Binding, data: ExampleModel) {
            binding.frogoRvListType1TvTitle.text = data.name
        }

        override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
            return FrogoRvListType1Binding.inflate(
                LayoutInflater.from(parent.context),
                parent,
                false
            )
        }

        override fun onItemClicked(data: ExampleModel) {
            // setup item clicked on frogo recycler view
            showToast(data.name)
        }

        override fun onItemLongClicked(data: ExampleModel) {
            // setup item long clicked on frogo recycler view
            showToast(data.name)
        }

    })
}

Sample Tutorial

Alert

Cautions :

>> under Version 3.0.1
- Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
- We separating resource ui for better maintenance

>> on Version 3.2.0
- If you use version under 3.2.0 you must pay attenttion to package import
- Please re-import package
- Package name [base, parent, boilerplate] updated to core

>> on Version 3.3.0 up
- If you use version under 3.3.0 you must pay attenttion to package import
- Please re-import package
- Package name [base, parent, boilerplate] updated to core
- No more package name [viewrclass, viewbinding, viewshimmer] all in core

Update :

>> on Version 3.2.0
from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback

>> on Version 3.3.0 up
from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
to -> import com.frogobox.recycler.core.IFrogoViewAdapter

>> on Version 3.3.0 up
from -> FrogoViewAdapterCallback
to -> IFrogoViewAdapter

Wiki

Library Helper

Colaborator

Very open to anyone, I'll write your name under this, please contribute by sending an email to me

  • Mail To [email protected]
  • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
  • Example : Github_amirisback_kotlin_admob-helper-implementation

Name Of Contribute

  • Muhammad Faisal Amir
  • Waiting List
  • Waiting List

Waiting for your contribute

Insipiration

Attention !!!

  • Please enjoy and don't forget fork and give a star
  • Don't Forget Follow My Github Account

ScreenShoot Apps

You might also like...
A flexible view for providing a limited rect window into a large data set,just like a two-dimensional RecyclerView.  It different from RecyclerView is that it's two-dimensional(just like a Panel) and it pin the itemView of first row and first column in their original location. ANDROID. ChipsLayoutManager (SpanLayoutManager, FlowLayoutManager). A custom layout manager for RecyclerView which mimicric TextView span behaviour, flow layouts behaviour with support of amazing recyclerView features
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

A RecyclerView that implements pullrefresh and loadingmore featrues.you can use it like a standard RecyclerView
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

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.

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

RecyclerView : SleepQualityTracker with RecyclerView app
RecyclerView : SleepQualityTracker with RecyclerView app

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

TikTok-RecyclerView - This is a demo app built using 'Koin' a new dependency injection framework for Android along with RecyclerView and ExoPlayer2.
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

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

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

An adapter to create Android RecyclerViews with sections, providing headers and footers.
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

Yet another adapter delegate library.
Yet another adapter delegate library.

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

Comments
  • RecyclerView CardView Bug

    RecyclerView CardView Bug

    I'm using the Kotlin Builder (ViewBinding) way to init the recyclerView, When trying to bind my layout with a cardView, it won't respect the match_parent width, its always wrap content The strange thing is, it worked with a normal RecyclerView, pretty sure it's a problem from the lib, please take a look

    here is the layout of the single Item

    <?xml version="1.0" encoding="utf-8"?>
    
    <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:cardView="http://schemas.android.com/apk/res-auto"
        android:id="@+id/cardView"
        android:layout_width="match_parent"
        android:layout_height="90dp"
        cardView:cardPreventCornerOverlap="true"
        cardView:cardCornerRadius="8dp"
        cardView:cardElevation="8dp"
        android:layout_margin="8dp">
    
        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <ImageView
                android:id="@+id/image_restaurant"
                android:layout_width="130dp"
                android:layout_height="0dp"
                android:scaleType="centerInside"
                cardView:layout_constraintBottom_toBottomOf="parent"
                cardView:layout_constraintStart_toStartOf="parent"
                cardView:layout_constraintTop_toTopOf="parent"
                tools:background="@tools:sample/backgrounds/scenic"
                tools:ignore="ContentDescription" />
    
            <TextView
                android:id="@+id/restaurant_name"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_margin="8dp"
                android:fontFamily="sans-serif-smallcaps"
                android:gravity="center"
                android:lines="1"
                android:padding="5dp"
                android:textAppearance="@style/TextAppearance.AppCompat.Title"
                android:textColor="@android:color/black"
                android:textStyle="bold"
                cardView:layout_constraintStart_toEndOf="@id/image_restaurant"
                cardView:layout_constraintEnd_toEndOf="parent"
                cardView:layout_constraintTop_toTopOf="parent"
                tools:text="@tools:sample/full_names" />
    
            <TextView
                android:id="@+id/openingHours"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="Dimanche  - jeudi  21h30 jeudi  21h30  jeudi  21h30  jeudi  21h30  jeudi  21h30   22-40"
                android:textStyle="bold"
                cardView:layout_constraintBottom_toBottomOf="parent"
                cardView:layout_constraintEnd_toEndOf="parent"
                cardView:layout_constraintStart_toEndOf="@+id/image_restaurant"
                cardView:layout_constraintTop_toBottomOf="@+id/restaurant_name" />
    
    
        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.cardview.widget.CardView>
    
    question 
    opened by Dave181295 6
  • Bottom navigation add padding to recyclerView

    Bottom navigation add padding to recyclerView

    Having a bottom navigation , when adding padding to the bottom of the recyclerView we got the last item expended ..

    <com.frogobox.recycler.widget.FrogoRecyclerView
            android:id="@+id/recycler_categorie_restaurant"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginTop="16dp"
            android:orientation="vertical"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/title_categorie_restaurant"
            tools:listitem="@layout/single_item_recycler_restaurant" />
    

    How to add a bottom padding in a simple way ? we tried also to make the height wrap content..

    question 
    opened by Dave181295 4
Releases(4.3.2)
  • 4.3.2(Dec 10, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.3.2
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.3.2'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.3.2")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.3.1(Aug 14, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.3.1
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.3.1'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.3.1")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.3.0(Jul 23, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.3.0
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.3.0'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.3.0")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.2.3(Jul 20, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.2.3
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.2.3'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.2.3")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.2.2(Jul 20, 2022)

  • 4.2.1(Jul 7, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.2.1
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.2.1'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.2.1")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.2.0(Jun 18, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.2.0
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.2.0'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.2.0")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.1.8(Jun 2, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.1.8
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.1.8'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.1.8")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.1.7(May 30, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.1.7
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.1.7'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.1.7")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.1.6(May 12, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.1.6
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.1.6'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.1.6")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.1.5(Apr 30, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.1.5
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.1.5'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.1.5")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.1.4(Apr 18, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.1.4
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.1.4'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.1.4")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.1.3(Apr 17, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.1.3
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.1.3'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.1.3")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.1.1(Apr 14, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.1.0
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.1.1'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.1.1")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.1.0(Apr 11, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.1.0
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    * Add Kotlin Ext For RecyclerView *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.1.0'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.1.0")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    Special Offering RecyclerView Kotlin Ext

    Click for detail!

    No Need Change XML to FrogoRecyclerView

    private fun setupRecyclerView(listData: List<Article>) {
    
        val adapterCallback = object :
            IFrogoViewAdapter<Article> {
            override fun setupInitComponent(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_title).text = data.title
                view.findViewById<TextView>(R.id.frogo_rv_list_type_8_tv_subtitle).text = data.description
                view.findViewById<ImageView>(R.id.frogo_rv_list_type_8_civ_poster)
                    .glideLoad(data.urlToImage)
            }
    
            override fun onItemClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                data.title?.let { showToast(it) }
            }
    
            override fun onItemLongClicked(
                view: View,
                data: Article,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<Article>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
            }
        }
    
        binding.rv.injector<Article>()
            .addData(listData)
            .addCustomView(R.layout.frogo_rv_list_type_8)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.0.8(Apr 7, 2022)

  • 4.0.7(Mar 29, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Android CI Scan with Detekt Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.0.7
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven("https://jitpack.io")
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.0.7'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.0.7")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.0.5(Mar 9, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.0.5
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url = uri("https://jitpack.io") }
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.0.5'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.0.5")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.0.4(Feb 25, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Medium Badge

    • Avaliable on Play Store Click Here
    • Available on Google Dev Library Click Here
    • Privacy Policy Click Here
    • LICENSE Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

    Version Release

    This Is Latest Release

    $version_release = 4.0.4
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url = uri("https://jitpack.io") }
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.0.4'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.0.4")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.0.3(Feb 16, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Medium Badge

    • Available on Google Dev Library Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    |Nested RecyclerView | Frogo Shimmer | Frogo Multi View | Simple Empty View | |:------------------:|:----------------------------:|:---------------------:|:-----------------:| | | | | |

    Version Release

    This Is Latest Release

    $version_release = 4.0.3
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url = uri("https://jitpack.io") }
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.0.3'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.0.3")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.0.2(Feb 12, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Medium Badge

    • Available on Google Dev Library Click Here
    • Easy RecyclerView Implementation
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    |Nested RecyclerView | Frogo Shimmer | Frogo Multi View | Simple Empty View | |:------------------:|:----------------------------:|:---------------------:|:-----------------:| | | | | |

    Version Release

    This Is Latest Release

    $version_release = 4.0.2
    

    What's New??

    * Enhance Performance *
    * Update Build Gradle Style Latest Version *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url = uri("https://jitpack.io") }
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.0.2'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.0.2")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.0.1(Jan 29, 2022)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Medium Badge

    • Available on Google Dev Library Click Here
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    |Nested RecyclerView | Frogo Shimmer | Frogo Multi View | Simple Empty View | |:------------------:|:----------------------------:|:---------------------:|:-----------------:| | | | | |

    Version Release

    This Is Latest Release

    $version_release = 4.0.1
    

    What's New??

    * Update Build Gradle to 7.1.0 *
    * Update Frogo Android UI Kit *
    * Enhance Performance *
    * FrogoRecyclerCompose - FrogoLazyColumn *
    * FrogoRecyclerCompose - FrogoLazyRow *
    * FrogoRecyclerCompose - FrogoLazyFixedGrid *
    * FrogoRecyclerCompose - FrogoLazyAdaptiveGrid *
    * Migrate From Groovy to Kotlin DSL *
    * IFrogoViewAdapter, IFrogoBindingAdapter, IFrogoSingleRv *
    

    New Function on FrogoRecyclerView

    // Notify Data List
    fun frogoNotifyData() : MutableList<T>
    
    // Notify Data Set Changed
    fun frogoNotifyDataSetChanged()
    
    // Notify Data Item Changed
    fun frogoNotifyItemChanged(data: T, position: Int, payload: Any)
    
    // Notify Data Item Changed
    fun frogoNotifyItemChanged(data: T, position: Int)
    
    // Notify Data Item Inserted
    fun frogoNotifyItemInserted(data: T, position: Int)
    
    // Notify Data Item Moved
    fun frogoNotifyItemMoved(data: T, fromPosition: Int, toPosition: Int)
    
    // Notify Data Item Range Changed
    fun frogoNotifyItemRangeChanged(data: List<T>, positionStart: Int, payload: Any)
    
    // Notify Data Item Range Changed
    fun frogoNotifyItemRangeChanged(data: List<T>, positionStart: Int)
    
    // Notify Data Item Range Inserted
    fun frogoNotifyItemRangeInserted(data: List<T>, positionStart: Int)
    
    // Notify Data Item Range Removed
    fun frogoNotifyItemRangeRemoved(positionStart: Int, itemCount: Int)
    
    // Notify Data Item Removed
    fun frogoNotifyItemRemoved(position: Int)
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url = uri("https://jitpack.io") }
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.0.1'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.0.1")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 4.0.0(Dec 11, 2021)

    ScreenShoot Apps

    About This Project

    Android Arsenal JitPack Medium Badge

    • Available on Google Dev Library Click Here
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Screen Shoot Apps

    |Nested RecyclerView | Frogo Shimmer | Frogo Multi View | Simple Empty View | |:------------------:|:----------------------------:|:---------------------:|:-----------------:| | | | | |

    Version Release

    This Is Latest Release

    $version_release = 4.0.0
    

    What's New??

    * Update Build Gradle to 7.0.4 *
    * Update Frogo Android UI Kit *
    * Enhance Performance *
    * FrogoRecyclerCompose - FrogoLazyColumn *
    * FrogoRecyclerCompose - FrogoLazyRow *
    * FrogoRecyclerCompose - FrogoLazyFixedGrid *
    * FrogoRecyclerCompose - FrogoLazyAdaptiveGrid *
    * Migrate From Groovy to Kotlin DSL *
    * IFrogoViewAdapter, IFrogoBindingAdapter, IFrogoSingleRv *
    

    New Function on FrogoRecyclerView

        // Notify Data List
        fun frogoNotifyData() : MutableList<T>
    
        // Notify Data Set Changed
        fun frogoNotifyDataSetChanged()
    
        // Notify Data Item Changed
        fun frogoNotifyItemChanged(data: T, position: Int, payload: Any)
    
        // Notify Data Item Changed
        fun frogoNotifyItemChanged(data: T, position: Int)
    
        // Notify Data Item Inserted
        fun frogoNotifyItemInserted(data: T, position: Int)
    
        // Notify Data Item Moved
        fun frogoNotifyItemMoved(data: T, fromPosition: Int, toPosition: Int)
    
        // Notify Data Item Range Changed
        fun frogoNotifyItemRangeChanged(data: List<T>, positionStart: Int, payload: Any)
    
        // Notify Data Item Range Changed
        fun frogoNotifyItemRangeChanged(data: List<T>, positionStart: Int)
    
        // Notify Data Item Range Inserted
        fun frogoNotifyItemRangeInserted(data: List<T>, positionStart: Int)
    
        // Notify Data Item Range Removed
        fun frogoNotifyItemRangeRemoved(positionStart: Int, itemCount: Int)
    
        // Notify Data Item Removed
        fun frogoNotifyItemRemoved(position: Int)
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url = uri("https://jitpack.io") }
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:4.0.0'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:4.0.0")
    }
    

    Step 3. Create xml view

    <com.frogobox.recycler.widget.FrogoRecyclerView
        android:id="@+id/frogo_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    Step 4. Setup requirement No Adapter (You can choose 1 of the 4 options below)

    <Option 1> Kotlin Injector (R class)

    Click for detail!
    private fun setupFrogoRecyclerView() {
    
        val adapterCallback = object :
            IFrogoViewAdapter<ExampleModel> {
            override fun setupInitComponent(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // Init component content item recyclerview
                view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
            }
    
            override fun onItemClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                view: View,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView
            .injector<ExampleModel>()
            .addData(listData())
            .addCustomView(R.layout.frogo_rv_list_type_1)
            .addEmptyView(null)
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    }
    

    <Option 2> Kotlin Injector (ViewBinding) Can't use emptyView

    Click for detail!
    private fun setupFrogoRecyclerBinding() {
    
        val adapterCallback = object : IFrogoBindingAdapter<ExampleModel, FrogoRvListType1Binding> {
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
        }
    
        binding.frogoRecyclerView.injectorBinding<ExampleModel, FrogoRvListType1Binding>()
            .addData(listDataBinding())
            .addCallback(adapterCallback)
            .createLayoutLinearVertical(false)
            .build()
    
    }
    

    <Option 3> Kotlin Builder (R class)

    Click for detail!
    private fun setupRvBuilder() {
       binding.frogoRecyclerView.builder(object : IFrogoBuilderRv<ExampleModel> {
           override fun setupData(): List<ExampleModel> {
               // Setup data FrogoRecyclerView
               return dataBuilderRClass
           }
    
           override fun setupCustomView(): Int {
               // Setup Custom View
               return R.layout.frogo_rv_list_type_1
           }
    
           override fun setupEmptyView(): Int? {
               // Setup Empty View
               return null
           }
    
           override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
               // Setup Layout Manager of FrogoRecyclerView
               return FrogoLayoutManager.linearLayoutVertical(context)
           }
    
           override fun setupInitComponent(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // Init component content item recyclerview
               view.findViewById<TextView>(R.id.frogo_rv_list_type_1_tv_title).text = data.name
           }
    
           override fun onItemClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
    
           override fun onItemLongClicked(
               view: View,
               data: ExampleModel,
               position: Int,
               notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
           ) {
               // setup item long clicked on frogo recycler view
               FLog.d("Clicked on Position : $position")
               showToast(data.name)
           }
       })
    }
    

    <Option 4> Kotlin Builder (ViewBinding)

    Click for detail!
    private fun setupRvBuilderBinding() {
        binding.frogoRecyclerView.builderBinding(object :
            IFrogoBuilderRvBinding<ExampleModel, FrogoRvListType1Binding> {
            override fun setupData(): List<ExampleModel> {
                // Setup data FrogoRecyclerView
                return dataBuilderBinding
            }
    
            override fun setupLayoutManager(context: Context): RecyclerView.LayoutManager {
                // Setup Layout Manager of FrogoRecyclerView
                return FrogoLayoutManager.linearLayoutVertical(context)
            }
    
            override fun setupInitComponent(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                binding.frogoRvListType1TvTitle.text = data.name
            }
    
            override fun setViewBinding(parent: ViewGroup): FrogoRvListType1Binding {
                return FrogoRvListType1Binding.inflate(
                    LayoutInflater.from(parent.context),
                    parent,
                    false
                )
            }
    
            override fun onItemClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
            override fun onItemLongClicked(
                binding: FrogoRvListType1Binding,
                data: ExampleModel,
                position: Int,
                notifyListener: FrogoRecyclerNotifyListener<ExampleModel>
            ) {
                // setup item long clicked on frogo recycler view
                FLog.d("Clicked on Position : $position")
                showToast(data.name)
            }
    
        })
    }
    

    Sample Tutorial

    Alert

    Big Update :

    ================================================================================================
    >> on Version 4.0.0
    - Every listener can get view/binding, position, and notify item change on Adapter
    - FrogoRecyclerView can notify item changed
    ================================================================================================
    

    Cautions :

    >> under Version 3.0.1
    - Please implement library [frogo-ui-kit](https://github.com/amirisback/frogo-ui-kit) in your project
    - We separating resource ui for better maintenance
    
    >> on Version 3.2.0
    - If you use version under 3.2.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    
    >> on Version 3.3.0 up
    - If you use version under 3.3.0 you must pay attenttion to package import
    - Please re-import package
    - Package name [base, parent, boilerplate] updated to core
    - No more package name [viewrclass, viewbinding, viewshimmer] all in core
    

    Update :

    >> on Version 3.2.0
    from -> import com.frogobox.recycler.boilerplate.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    
    >> on Version 3.3.0 up
    from -> import com.frogobox.recycler.core.viewrclass.FrogoViewAdapterCallback
    to -> import com.frogobox.recycler.core.IFrogoViewAdapter
    
    >> on Version 3.3.0 up
    from -> FrogoViewAdapterCallback
    to -> IFrogoViewAdapter
    

    Wiki

    Library Helper

    Colaborator

    Very open to anyone, I'll write your name under this, please contribute by sending an email to me

    • Mail To [email protected]
    • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
    • Example : Github_amirisback_kotlin_admob-helper-implementation

    Name Of Contribute

    • Muhammad Faisal Amir
    • Waiting List
    • Waiting List

    Waiting for your contribute

    Insipiration

    Attention !!!

    • Please enjoy and don't forget fork and give a star
    • Don't Forget Follow My Github Account

    ScreenShoot Apps

    Source code(tar.gz)
    Source code(zip)
  • 3.8.8(Sep 22, 2021)

    About This Project

    Android Arsenal JitPack Medium Badge

    • Available on Google Dev Library Click Here
    • RecyclerView No Adapter (Adapter Has Been Handled)
    • RecyclerView No Adapter Using ViewBinding Adapter
    • RecyclerView Multi-View-Type (Stable - Multi ViewHolder)
    • Using Kotlin DSL build.gradle.kts
    • Elegant call using injector()
    • Shimmer Effect, Empty View Effect, Nested Recycler View, Progress Recycler View
    • Jetpack Compose UI (Beta Experimental) - FrogoRecyclerCompose Click Here

    Version Release

    This Is Latest Release

    $version_release = 3.8.8
    

    What's New??

    * Update Build Gradle to 7.0.2 *
    * Update Frogo Android UI Kit *
    * Enhance Performance *
    * FrogoRecyclerCompose - FrogoLazyColumn *
    * FrogoRecyclerCompose - FrogoLazyRow *
    * FrogoRecyclerCompose - FrogoLazyFixedGrid *
    * FrogoRecyclerCompose - FrogoLazyAdaptiveGrid *
    * Migrate From Groovy to Kotlin DSL *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    // Add it in your root build.gradle at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    <Option 2> Kotlin DSL Gradle

    // Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url = uri("https://jitpack.io") }
        }
    }
    
    Source code(tar.gz)
    Source code(zip)
  • 3.8.7(Sep 19, 2021)

    Version Release

    This Is Latest Release

    $version_release = 3.8.7
    

    What's New??

    * Update Build Gradle to 7.0.2 *
    * Update Frogo Android UI Kit *
    * Enhance Performance *
    * FrogoRecyclerCompose - FrogoLazyColumn *
    * FrogoRecyclerCompose - FrogoLazyRow *
    * FrogoRecyclerCompose - FrogoLazyGrid *
    * Migrate From Groovy to Kotlin DSL *
    

    Compose Tutorial - FrogoRecyclerCompose Click Here

    Download this project

    Step 1. Add the JitPack repository to your build file (build.gradle : Project)

    <Option 1> Groovy Gradle

    Add it in your root build.gradle at the end of repositories:
    
    	allprojects {
    		repositories {
    			...
    			maven { url 'https://jitpack.io' }
    		}
    	}
    

    <Option 2> Kotlin DSL Gradle

    Add it in your root build.gradle.kts at the end of repositories:
    
    allprojects {
        repositories {
            ...
            maven { url = uri("https://jitpack.io") }
        }
    }
    

    Step 2. Add the dependency (build.gradle : Module)

    <Option 1> Groovy Gradle

    dependencies {
        // library frogo-recycler-view
        implementation 'com.github.amirisback:frogo-recycler-view:3.8.7'
    }
    

    <Option 2> Kotlin DSL Gradle

    dependencies {
        // library frogo-recycler-view
        implementation("com.github.amirisback:frogo-recycler-view:3.8.7")
    }
    
    Source code(tar.gz)
    Source code(zip)
  • 3.8.6(Sep 9, 2021)

    What's New??

    * Update Build Gradle to 7.0.2 *
    * Update Frogo Android UI Kit *
    * Enhance Performance *
    * FrogoRecyclerCompose - FrogoLazyColumn *
    * FrogoRecyclerCompose - FrogoLazyRow *
    * FrogoRecyclerCompose - FrogoLazyGrid *
    

    Compose Tutorial - FrogoRecyclerCompose Experimental Click Here

    Source code(tar.gz)
    Source code(zip)
  • 3.8.5(Aug 19, 2021)

  • 3.8.3(Aug 19, 2021)

  • 3.8.2(Aug 18, 2021)

  • 3.8.1(Jul 24, 2021)

    * Add: Function Builder Binding *
    * Add: New Sample Code *
    * Renaming FrogoBuilderRvListener to IFrogoBuilderRv *
    * Renaming some variable in library *
    * Update Tutorial Link *
    * Update Build Gradle *
    * Enhance Performance *
    * Refactoring Code *
    
    Source code(tar.gz)
    Source code(zip)
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
Easy RecyclerView Adapter

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

JaredDoge 4 Dec 3, 2021
Add RecyclerView, use Adapter class and ViewHolder to display data.

فكرة المشروع في هذا المشروع سنقوم بعرض قائمة من البيانات للطلاب على واجهة تطبيق Android بإستخدام: مفهوم RecyclerView مفهوم Adapter مفهوم ViewModel محت

Shaima Alghamdi 3 Nov 18, 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