package Ġ` in `. j at ind h ank har . w lo sh . ui . listeners Ċ Ċ import Ġandroid . support . v 7 . widget . Grid LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġj atin Ġon Ġ 2 / 7 / 1 8 . Ċ Ġ*/ Ċ // ĠThanks Ġhttps :// github . com / code path / android _ guides / wiki / End less - Scrolling - with - Adapter Views - and - RecyclerView Ċ abstract Ġclass ĠIn finite Scroll Listener ( val Ġm LayoutManager : ĠGrid LayoutManager , Ġvar Ġvisible Threshold : ĠInt Ġ= Ġ 1 0 ) Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Previous Total Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Loading Ġ= Ġtrue ĊĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĠĠĠĠĠĠĠ Ġvar Ġvisible ItemCount Ġ= Ġre cyclerView . child Count ĊĠĠĠĠĠĠĠ Ġvar Ġtotal ItemCount Ġ= Ġm LayoutManager . item Count ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Visible Item Ġ= Ġm LayoutManager . findFirst Visible Item Position () ĊĠĠĠĠĠĠĠ Ġif Ġ( m Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( total ItemCount Ġ> Ġm Previous Total ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Loading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Previous Total Ġ= Ġtotal ItemCount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Loading Ġ&& Ġ( total ItemCount Ġ- Ġvisible ItemCount ) Ġ<= Ġ( first Visible Item Ġ+ Ġvisible ItemCount )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonLoad More () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Loading Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ) Ġ&& Ġre cyclerView . can Scroll Vert ically (- 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre Prompt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun ĠonLoad More () ĊĊĠĠĠ Ġabstract Ġfun Ġre Prompt () Ċ }