package Ġcom . pac ific . gu ava . android . ui . view . recyclerview Ċ Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . St agger ed Grid LayoutManager Ċ Ċ class ĠEnd less RecyclerView Scroll Listener ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlayout Manager : ĠRecyclerView . LayoutManager , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġload More : Ġ( total Items Count : ĠInt , Ġview : ĠRecyclerView ) Ġ-> ĠUnit Ċ ) Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġload More Threshold Ġ= Ġ 3 ĊĠĠĠ Ġprivate Ġvar Ġprevious ItemCount Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġloading Ġ= Ġtrue ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠConvert Ġthe Ġthreshold Ġso Ġthat Ġis Ġfor Ġrows , Ġnot Ġitems ĊĠĠĠĠĠĠĠ Ġwhen Ġ( layout Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid LayoutManager Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload More Threshold Ġ*= Ġlayout Manager . span Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSt agger ed Grid LayoutManager Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload More Threshold Ġ*= Ġlayout Manager . span Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetLast Visible Item ( last Visible Item Positions : ĠInt Array ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠmaxSize Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlast Visible Item Positions . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxSize Ġ= Ġlast Visible Item Positions [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( last Visible Item Positions [ i ] Ġ> ĠmaxSize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxSize Ġ= Ġlast Visible Item Positions [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠmaxSize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( view : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlast Visible Item Position Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġitem Count Ġ= Ġlayout Manager . item Count ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( layout Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSt agger ed Grid LayoutManager Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Visible Item Positions Ġ= Ġlayout Manager . find Last Visible Item Positions ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġmaximum Ġelement Ġwithin Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Visible Item Position Ġ= ĠgetLast Visible Item ( last Visible Item Positions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid LayoutManager Ġ-> Ġlast Visible Item Position Ġ= Ġlayout Manager . find Last Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLinearLayoutManager Ġ-> Ġlast Visible Item Position Ġ= Ġlayout Manager . find Last Visible Item Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( item Count Ġ< Ġprevious ItemCount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious ItemCount Ġ= Ġitem Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( loading Ġ&& Ġitem Count Ġ> Ġprevious ItemCount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious ItemCount Ġ= Ġitem Count ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! loading Ġ&& Ġlast Visible Item Position Ġ+ Ġload More Threshold Ġ> Ġitem Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload More ( item Count , Ġview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġprevious ItemCount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ }