package Ġcom . one . k um aran . rest pokemon . ui . main Ċ Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . one . k um aran . rest pokemon . R Ċ import Ġcom . one . k um aran . rest pokemon . repository . model . Pokemon Ċ import Ġkotlinx . android . synt hetic . main . item _ main . view .* Ċ Ċ class ĠMain Adapter ( val Ġitem ClickListener : ĠItem ClickListener , Ġval Ġload More Listener : ĠLoad More Listener , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre cyclerView : ĠRecyclerView ): ĊĠĠĠĠĠĠĠ ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġval ĠdataSet Ġ= ĠArrayList < Pokemon >() ĊĠĠĠ Ġvar ĠisLoading Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠsetUp Load More () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( view Group : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( view Group . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . item _ main , Ġview Group , Ġfalse ) Ġas ĠView ĊĠĠĠĠĠĠĠ Ġval ĠviewHolder Ġ= ĠNormal ViewHolder ( view ) ĊĠĠĠĠĠĠĠ Ġview . setOnClickListener Ġ{ Ġitem ClickListener . item Clicked ( data Set . get ( view Holder . adapter Position )) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠviewHolder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠNormal ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( holder . view . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( data Set . get ( position ). url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( holder . image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . name . setText ( data Set . get ( position ). name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . types . setText ( data Set . get ( position ). types ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠdataSet . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Item ( pokemon : ĠPokemon ) Ġ{ ĊĠĠĠĠĠĠĠ ĠdataSet . add ( pokemon ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Load More () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlinear LayoutManager Ġ= Ġre cyclerView . layout Manager Ġas ĠLinearLayoutManager ĊĠĠĠĠĠĠĠ Ġre cyclerView . add On Scroll Listener ( object : ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Items Ġ= Ġlinear LayoutManager . item Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Visible Item Ġ= Ġlinear LayoutManager . find Last Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisible Threshold Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isLoading Ġ&& Ġ( total Items Ġ<= Ġ( last Visible Item Ġ+ Ġvisible Threshold ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload More Listener . load More () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġitem Clicked ( pokemon : ĠPokemon ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠLoad More Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġload More () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠNormal ViewHolder ( val Ġview : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġview . name ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġview . image ĊĠĠĠĠĠĠĠ Ġval Ġtypes Ġ= Ġview . types ĊĠĠĠ Ġ} Ċ } Ċ