package Ġcom . example . eye demo . ui . home . comm end Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . example . eye demo . R Ċ import Ġcom . example . eye demo . event . Message Event Ċ import Ġcom . example . eye demo . event . Refresh Event Ċ import Ġcom . example . eye demo . extension . show Toast Ċ import Ġcom . example . eye demo . ui . common . ui . Base Fragment Ċ import Ġcom . example . eye demo . util . Injector Util Ċ import Ġcom . example . eye demo . util . Response Handler Ċ import Ġcom . sc wang . smart . refresh . layout . constant . Refresh State Ċ import Ġkotlinx . android . synt hetic . main . fragment _ refresh _ layout .* Ċ Ċ class ĠCom m end Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠCom m end Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this , ĠInject or Util . get HomePage Comm end ViewModel Factory ()). get ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCom m end ViewModel :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠCom m end Adapter ; ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater . inflate ( R . layout . fragment _ refresh _ layout , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠCom m end Adapter ( this , ĠviewModel . data List ) ĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= ĠLinearLayoutManager ( activity ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= Ġlayout Manager ĊĠĠĠĠĠĠĠ Ġre cyclerView . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġrefresh Layout . setOn Refresh Listener Ġ{ ĠviewModel . on Refresh () Ġ} ĊĠĠĠĠĠĠĠ Ġrefresh Layout . setOn Load More Listener Ġ{ ĠviewModel . on Load More () Ġ} ĊĠĠĠĠĠĠĠ Ġobserve () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Data Once () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . load Data Once () ĊĠĠĠĠĠĠĠ Ġstart Loading () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . start Loading () ĊĠĠĠĠĠĠĠ ĠviewModel . on Refresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Failed ( msg : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . load Failed ( msg ) ĊĠĠĠĠĠĠĠ Ġshow Load Error View ( msg Ġ?: Ġ" åıĳçĶŁ æľª çŁ¥ éĶĻè¯¯ ") Ġ{ Ġstart Loading () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Message Event ( message : ĠMessage Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Message Event ( message ) ĊĠĠĠĠĠĠĠ Ġif Ġ( message Ġis ĠRefresh Event Ġ&& Ġjava Class Ġ== Ġmessage . activity Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . auto Refresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re cyclerView . adapter ?. item Count Ġ?: Ġ 0 Ġ> Ġ 0 ) Ġre cyclerView . scrollTo Position ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . data List LiveData . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġresult . get OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Handler . get Failure Tips ( result . exception OrNull ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġif Ġ( viewModel . data List . isNull OrEmpty ()) Ġload Failed ( it ) Ġelse Ġit . show Toast () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . close Header Or Footer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Finished () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . next Page Url Ġ= Ġresponse . next Page Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . item List . isNull OrEmpty () Ġ&& ĠviewModel . data List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . close Header Or Footer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . item List . isNull OrEmpty () Ġ&& ĠviewModel . data List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . finish Load More With No More Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( refresh Layout . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRefresh State . None , ĠRefresh State . Refresh ing Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . data List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . data List . addAll ( response . item List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRefresh State . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Count Ġ= ĠviewModel . data List . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . data List . addAll ( response . item List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Item Range Inserted ( item Count , Ġresponse . item List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . next Page Url . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . finish Load More With No More Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . close Header Or Footer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} Ċ }