package Ġcom . example . mv vm _ h ilt . ui . main Ċ Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ /** Ċ Ġ* Ġcreate Ġby Ġs ill ad us Ġ 2 0 2 0 / 8 / 3 Ċ Ġ* Ġgithub : https :// github . com / s ill ad us Ċ Ġ* Ġdes : Ċ Ġ*/ Ċ class ĠRecyclerView Paging ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠisLoading : Ġ() Ġ-> ĠBoolean , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġload More : Ġ( Int ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Last : Ġ() Ġ-> ĠBoolean Ġ= Ġ{ Ġtrue Ġ} Ċ ) Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĊĠĠĠ Ġvar Ġthreshold Ġ= Ġ 1 0 ĊĠĠĠ Ġvar ĠcurrentPage : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġend With Auto Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . add On Scroll Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisible ItemCount Ġ= Ġit . child Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal ItemCount Ġ= Ġit . item Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Visible Item Position Ġ= Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLinearLayoutManager Ġ-> Ġit . find Last Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid LayoutManager Ġ-> Ġit . find Last Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Last () Ġ|| ĠisLoading ()) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end With Auto ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visible ItemCount Ġ+ Ġfirst Visible Item Position Ġ== Ġtotal ItemCount ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( visible ItemCount Ġ+ Ġfirst Visible Item Position Ġ+ Ġthreshold ) Ġ>= Ġtotal ItemCount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload More ( ++ currentPage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Current Page () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . currentPage Ġ= Ġ 0 ĊĠĠĠ Ġ} Ċ }