package Ġcom . k lem er . end less recyclerview Ċ Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . recyclerview . widget . Concat Adapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ /** Ċ Ġ* ĠCreate ĠInstance Ġof ĠEnd less RecyclerView Ċ Ġ* Ġ@ param Ġre cyclerView ĠRecyclerView Ġto Ġcreate Ġinfinite Ġscroll . Ċ Ġ* Ġ@ param Ġon Sc rolled To Bottom ĠCallback Ġto Ġbe Ġinvoked Ġwhen Ġre cyclerView Ġhas Ġbeen Ġsc rolled . Ċ Ġ*/ Ċ open Ġclass ĠEnd less RecyclerView ( ĊĠĠĠ Ġprivate Ġval Ġre cyclerView : ĠRecyclerView , ĊĠĠĠ Ġprivate Ġval Ġon Sc rolled To Bottom : Ġ( end less RecyclerView : ĠEnd less RecyclerView ) Ġ-> ĠUnit Ċ ) Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar ĠisLoading Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġend less RecyclerView Adapter : ĠEnd less RecyclerView Adapter ĊĠĠĠ Ġprivate Ġvar Ġshow Loading Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġcustom Loading View : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Scroll StateChanged ( re cyclerView : ĠRecyclerView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Scroll StateChanged ( re cyclerView , ĠnewState ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! re cyclerView . can Scroll Vert ically ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠnewState Ġ== ĠRecyclerView . SCROLL _ STATE _ IDLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! isLoading ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend less RecyclerView Adapter . should Loading ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġcallback Ġis Ġinvoked Ġwhen Ġre cyclerView Ġhas Ġbeen Ġsc rolled Ġto Ġend ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Sc rolled To Bottom . invoke ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegister Ġan Ġobserver Ġto Ġcurrent Ġadapter . ĠWhen Ġadapter Ġdataset Ġis Ġchanged , ĊĠĠĠĠ Ġ* Ġthis Ġhide Ġthe Ġloading Ġview . ĊĠĠĠĠ Ġ* Ġ@ param Ġre cyclerView Ġcurrent Ġre cycler Ġview . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġregister Adapter Observer ( re cyclerView : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter ?. register Adapter Data Observer ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecyclerView . Adapter Data Observer () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend less RecyclerView Adapter . should Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefine Ġif Ġshow Ġa Ġloading Ġwhen Ġsc rolled Ġto Ġbottom Ġof Ġlist ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġshow ĠBoolean Ġif Ġshow Ġor Ġnot Ġloading . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow Loading ( show : ĠBoolean Ġ= Ġtrue ): ĠEnd less RecyclerView Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Loading Ġ= Ġshow ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCall Ġthis Ġfunction Ġif Ġyou Ġneed Ġstop Ġloading Ġanimation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstop Loading (): ĠEnd less RecyclerView Ġ{ ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġend less RecyclerView Adapter . should Loading ( false ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefine Ġa Ġcustom Ġview Ġfor Ġloading . ĠIf Ġset Ġthis , Ġshow Loading Ġis Ġset Ġto Ġtrue ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcustom View ĠCustom Ġlayout . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Custom Loading View (@ Layout Res Ġcustom View : ĠInt ): ĠEnd less RecyclerView Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . show Loading ( true ) ĊĠĠĠĠĠĠĠ Ġcustom Loading View Ġ= Ġcustom View ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate ĠEnd less RecyclerView ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate (): ĠEnd less RecyclerView Ġ{ ĊĠĠĠĠĠĠĠ Ġend less RecyclerView Adapter Ġ= ĠEnd less RecyclerView Adapter ( custom Loading View ) ĊĊĠĠĠĠĠĠĠ Ġregister Adapter Observer ( re cyclerView ) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Adapter Ġ= Ġre cyclerView . adapter ĊĊĠĠĠĠĠĠĠ Ġif Ġ( show Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= ĠConcat Adapter ( current Adapter , Ġend less RecyclerView Adapter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ