package Ġcom . shop app . ui . base . recycler Ċ Ċ import Ġandroid . support . v 7 . widget . Grid LayoutManager Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . support . v 7 . widget . St agger ed Grid LayoutManager ĊĊ Ċ abstract Ġclass ĠEnd less RecyclerView Scroll Listener ( ĊĠĠĠ Ġprivate Ġval Ġlayout Manager : ĠRecyclerView . LayoutManager , ĊĠĠĠ Ġprivate Ġvar Ġwith Header : ĠBoolean Ġ= Ġfalse ) Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġvisible Threshold Ġ= Ġ 5 ĊĠĠĠ Ġprivate Ġvar ĠcurrentPage Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġprevious Total ItemCount Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġloading Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġval Ġstarting Page Index Ġ= Ġ 0 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Manager Ġis ĠGrid LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisible Threshold Ġ*= Ġlayout Manager . span Count ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( layout Manager Ġis ĠSt agger ed Grid LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisible 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 ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( layout Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSt agger ed Grid LayoutManager Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Visible Item Positions Ġ= Ġlayout Manager . find Last Visible Item Positions ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 Ġ( items Without Header Total Count Ġ< Ġprevious Total ItemCount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . currentPage Ġ= Ġthis . starting Page Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . previous Total ItemCount Ġ= Ġitems Without Header Total Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( items Without Header Total Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . loading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( loading Ġ&& Ġitems Without Header Total Count Ġ> Ġprevious Total ItemCount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Total ItemCount Ġ= Ġitems Without Header Total Count ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ(! loading Ġ&& Ġlast Visible Item Position Ġ+ Ġvisible Threshold Ġ> Ġitems Total Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage ++ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonLoad More ( currentPage , Ġitems Without Header Total Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġitems Total Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlayout Manager . item Count ĊĊĠĠĠ Ġprivate Ġval Ġitems Without Header Total Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( with Header ) Ġitems Total Count Ġ- Ġ 1 Ġelse Ġitems Total Count ĊĊĊĠĠĠ Ġabstract Ġfun ĠonLoad More ( page : ĠInt , Ġtotal Items Count : ĠInt ) Ċ }