GithubHelp home page GithubHelp logo

amirisback / frogo-recycler-view Goto Github PK

View Code? Open in Web Editor NEW
164.0 4.0 16.0 58.9 MB

RecyclerView With No Adapter | Available For Jetpack Compose

Home Page: https://faisalamircs.medium.com/tutorial-recyclerview-cuman-15-detik-dengan-frogorecyclerview-cocok-buat-prototype-untuk-client-ad03b1af907e

License: Apache License 2.0

Kotlin 84.18% Java 15.82%
recyclerview recyclerview-no-adapter android-library recyclerview-library without-adapter shimmer-recyclerview shimmer-loading shimmer shimmer-android frogo-library

frogo-recycler-view's Introduction

App Screenshots

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
  • Using Diff Util
  • Flexbox Layout Manager
  • Default Value Of Layout Manager

App Screenshots

Nested RecyclerView Frogo Shimmer Frogo Multi View Simple Empty View

Version Release

This Is Latest Release

$version_release = 4.4.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.4.1'
}

<Option 2> Kotlin DSL Gradle

dependencies {
    // library frogo-recycler-view
    implementation("com.github.amirisback:frogo-recycler-view:4.4.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

App Screenshots

frogo-recycler-view's People

Contributors

aljidy avatar amirisback avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

frogo-recycler-view's Issues

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>

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..

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.