package Ġapp . base . mv vm . vm . list Ċ Ċ import Ġandroid . databinding . Observable Boolean Ċ import Ġandroid . support . v 4 . widget . Swipe Refresh Layout Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . View Ċ import Ġapp . base . mv vm . presenter . IP res enter Ċ import Ġapp . base . mv vm . view . I View Ċ import Ġapp . base . mv vm . vm . Base VM Ċ import Ġapp . base . widget . IL o ad More Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġdan iel Ġon Ġ 1 8 - 1 - 1 5 . Ċ Ġ*/ Ċ abstract Ġclass ĠBase List VM < out ĠP Ġ: ĠIP res enter , Ġout ĠV Ġ: ĠI View , ĠD Ġ: ĠAny >( presenter : ĠP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ Ġview : ĠV , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ Ġval Ġlayout Manager : ĠRecyclerView . LayoutManager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ Ġval Ġadapter : ĠBase List Ad at per < D >) Ġ: IL o ad More , ĠBase VM < P , ĠV >( presenter , Ġview ) Ġ{ ĊĠĠĠ Ġopen Ġvar ĠPAGE _ SIZE Ġ= Ġ 2 5 ĊĠĠĠ Ġprivate Ġvar ĠcurrentPage Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġrefresh ing Ġ= ĠObservable Boolean ( false ) ĊĠĠĠ Ġvar Ġloading Ġ= Ġfalse ĊĊĠĠĠ Ġval Ġrefresh ing Listener Ġ= ĠSw ipe Refresh Layout . On Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġload Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . load More Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġloading Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠonLoad Data ( currentPage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonLoad More () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠcurrentPage ++ ĊĠĠĠĠĠĠĠ ĠonLoad Data ( currentPage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun ĠonLoad Data ( page : ĠInt ) ĊĊĊĠĠĠ Ġfun Ġbind Result ( result : ĠList < D > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh ing . set ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġresult ?. size Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( size Ġ< ĠPAGE _ SIZE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . footer Type Ġ= ĠBase List Ad at per . TYPE _ FO OTER _ NO _ MORE ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . footer Type Ġ= ĠBase List Ad at per . TYPE _ FO OTER _ LOADING ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( result Ġ!= Ġnull Ġ&& Ġsize Ġ> Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Set Ġ= Ġmutable ListOf < D >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Set . addAll ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( currentPage Ġ Ġ== Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . setData ( list Set ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . addAll ( list Set ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbind Error ( errorCode : ĠInt , Ġmsg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġrefresh ing . set ( false ) ĊĠĠĠĠĠĠĠ Ġif ( currentPage > 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . footer Type Ġ= ĠBase List Ad at per . TYPE _ FO OTER _ ERROR ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ