package Ġcom . th ales . github . ui . listener Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ Ċ abstract Ġclass ĠEnd less Recycler On Scroll Listener ( private Ġval Ġlinear LayoutManager : ĠLinearLayoutManager ) Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĊĠĠĠ Ġ// ĠThe Ġtotal Ġnumber Ġof Ġitems Ġin Ġthe Ġdataset Ġafter Ġthe Ġlast Ġload ĊĠĠĠ Ġprivate Ġvar Ġprevious Total Ġ= Ġ 0 ĊĊĠĠĠ Ġ// ĠTrue Ġif Ġwe Ġare Ġstill Ġwaiting Ġfor Ġthe Ġlast Ġset Ġof Ġdata Ġto Ġload . ĊĠĠĠ Ġprivate Ġvar Ġloading Ġ= Ġtrue ĊĊĠĠĠ Ġ// ĠThe Ġminimum Ġamount Ġof Ġitems Ġto Ġhave Ġbelow Ġyour Ġcurrent Ġscroll Ġposition Ġbefore Ġloading Ġmore . ĊĠĠĠ Ġprivate Ġval Ġvisible Threshold Ġ= Ġ 5 ĊĠĠĠ Ġprivate Ġvar Ġfirst Visible Item : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġvisible ItemCount : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġtotal ItemCount : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar ĠcurrentPage Ġ= Ġ 1 ĊĊĠĠĠ Ġfun ĠsetCurrent Page ( currentPage : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . currentPage Ġ= ĠcurrentPage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Restore InstanceState ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState . containsKey ( B UNDLE _ CURRENT _ PAGE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage Ġ= ĠsavedInstanceState . getInt ( B UNDLE _ CURRENT _ PAGE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout State . put Int ( B UNDLE _ CURRENT _ PAGE , ĠcurrentPage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView ?, Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĊĠĠĠĠĠĠĠ Ġvisible ItemCount Ġ= Ġre cyclerView !!. child Count ĊĠĠĠĠĠĠĠ Ġtotal ItemCount Ġ= Ġlinear LayoutManager . item Count ĊĠĠĠĠĠĠĠ Ġfirst Visible Item Ġ= Ġlinear LayoutManager . findFirst Visible Item Position () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( loading Ġ&& Ġtotal ItemCount Ġ> Ġprevious Total ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Total Ġ= Ġtotal ItemCount ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! loading Ġ&& Ġtotal ItemCount Ġ- Ġvisible ItemCount Ġ<= Ġfirst Visible Item Ġ+ Ġvisible Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnd Ġhas Ġbeen Ġreached ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġsomething ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠonLoad More ( currentPage ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun ĠonLoad More ( currentPage : ĠInt ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠB UNDLE _ CURRENT _ PAGE Ġ= Ġ" current - page " ĊĠĠĠ Ġ} Ċ } Ċ