package Ġcom . sh uy u . github . kotlin . module . base Ċ Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . arch . lifecycle . ViewModel Provider Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . content . Context Ċ import Ġandroid . databinding . ViewData Binding Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . View Ċ import Ġcom . sh uy u . common recycler . Bind Super Adapter Ċ import Ġcom . sh uy u . common recycler . Bind Super Adapter Manager Ċ import Ġcom . sh uy u . common recycler . listener . On ItemClickListener Ċ import Ġcom . sh uy u . common recycler . listener . On Loading Listener Ċ import Ġcom . sh uy u . github . kotlin . model . ui . Empty UI Model Ċ import Ġcom . sh uy u . github . kotlin . ui . holder . Empty Holder Ċ import Ġcom . sh uy u . github . kotlin . ui . holder . base . Bind Custom Load More Footer Ċ import Ġcom . sh uy u . github . kotlin . ui . holder . base . Bind Custom Refresh Header Ċ import Ġcom . sh uy u . github . kotlin . ui . holder . base . Binding Data Recycler Manager Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* Ġ åŁºç¡Ģ åĪĹè¡¨ Ċ Ġ* ĠCreated Ġby Ġgu os hu yu Ċ Ġ* ĠDate : Ġ 2 0 1 8 - 1 0 - 1 9 Ċ Ġ*/ Ċ abstract Ġclass ĠBase List Fragment < T Ġ: ĠView Data Binding , ĠR Ġ: ĠBase ViewModel > Ġ: ĠBase Fragment < T >(), ĠOn ItemClickListener , ĠOn Loading Listener Ġ{ ĊĊĠĠĠ Ġprotected Ġvar Ġnormal Adapter Manager Ġby Ġauto Cle ared < Binding Data Recycler Manager >() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbase ViewModel : ĠR ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġvar Ġadapter Ġby Ġauto Cle ared < Bind Super Adapter >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( main View : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġnormal Adapter Manager Ġ= ĠBinding Data Recycler Manager () ĊĠĠĠĠĠĠĠ Ġbase ViewModel Ġ= ĠViewModel Providers . of ( this , ĠviewModel Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( get ViewModel Class ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġinit List () ĊĊĠĠĠĠĠĠĠ Ġget ViewModel (). loading . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad State . Refresh Done Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Complete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad State . Load More Done Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload More Complete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad State . Refresh Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/// åĪ·æĸ° æĹ¶ æ¸ħ ç©º æĹ§ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġget ViewModel (). data List . observe ( this , ĠObserver Ġ{ Ġitems Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( items . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( get ViewModel (). is First Data ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. data List ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Size : ĠInt Ġ= Ġadapter ?. data List ?. size Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. data List ?. addAll ( items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Insert ( current Size , Ġitems . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( get ViewModel (). is First Data ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. data List ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġget ViewModel (). need More . observe ( this , ĠObserver Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Adapter Manager ?. set No More (! it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġshow Refresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġitem çĤ¹åĩ» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( context : ĠContext , Ġposition : ĠInt ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪ·æĸ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġget ViewModel (). refresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬłè½½ æĽ´å¤ļ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonLoad More () Ġ{ ĊĠĠĠĠĠĠĠ Ġget ViewModel (). load More () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå½ĵåīį Ġre cyclerView ï¼Į ä¸ºç©º åį³ ä¸į èµ° Ġ@ link [ init List ] ĠçļĦ åĪĿå§ĭåĮĸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġget RecyclerView (): ĠRecyclerView ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĳå®ļ Item ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġbind Holder ( manager : ĠBind Super Adapter Manager ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠViewModel ĠClass ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġget ViewModel Class (): ĠClass < R > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠViewModel ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġget ViewModel (): ĠR Ġ= Ġbase ViewModel ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ éľĢè¦ģ ä¸ĭ æĭī åĪ·æĸ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġenable Refresh (): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ éľĢè¦ģ ä¸ĭ æĭī åĪ·æĸ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġenable Load More (): ĠBoolean Ġ= Ġfalse ĊĊĊĠĠĠ Ġopen Ġfun Ġrefresh Complete () Ġ{ ĊĠĠĠĠĠĠĠ Ġnormal Adapter Manager ?. refresh Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġload More Complete () Ġ{ ĊĠĠĠĠĠĠĠ Ġnormal Adapter Manager ?. load More Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġshow Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġnormal Adapter Manager ?. set Refresh ing ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun ĠisLoading (): ĠBoolean Ġ= Ġget ViewModel (). isLoading () ĊĊĠĠĠ Ġopen Ġfun Ġnotify Insert ( position : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. notify Item Range Inserted ( position Ġ+ Ġadapter !!. abs First Position (), Ġcount ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġnotify Delete ( position : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. data List ?. remove At ( position ) ĊĠĠĠĠĠĠĠ Ġadapter ?. notify Item Range Removed ( position Ġ+ Ġadapter !!. abs First Position (), Ġcount ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġnotify Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit List () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull Ġ&& Ġget RecyclerView () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Adapter Manager ?. set Pull Refresh Enabled ( enable Refresh ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . set Loading More Enabled ( enable Load More ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . setOn ItemClickListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . set Loading Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . set Refresh Header ( Bind Custom Refresh Header ( activity !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . set Foot View ( Bind Custom Load More Footer ( activity !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . set Loading More Empty Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . bind Empty ( Empty UI Model (), ĠEmpty Holder . ID , ĠEmpty Holder :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Adapter Manager ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Holder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠBind Super Adapter ( activity Ġas ĠContext , Ġthis , Ġarray ListOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget RecyclerView ()?. layout Manager Ġ= ĠLinearLayoutManager ( activity !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget RecyclerView ()?. adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }