package Ġpl . app lover . architecture . mv vm . v vm . example . next example . example list ĊĊ Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġdagger . android . support . D agger Fragment Ċ import Ġkotlinx . android . synt hetic . main . example _ fragment _ list .* Ċ import Ġkotlinx . android . synt hetic . main . example _ item _ network _ state .* Ċ import Ġpl . app lover . architecture . mv vm . App Ċ import Ġpl . app lover . architecture . mv vm . R Ċ import Ġpl . app lover . architecture . mv vm . adapters . cities . Example City Adapter Ċ import Ġpl . app lover . architecture . mv vm . util . architecture . network . Network State Ċ import Ġpl . app lover . architecture . mv vm . util . extensions . show Toast Ċ import Ġpl . app lover . architecture . mv vm . util . ui . hide Ċ import Ġpl . app lover . architecture . mv vm . util . ui . show Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠExample List Fragment Ġ: ĠD agger Fragment () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġinternal Ġlateinit Ġvar ĠviewModel Factory : ĠExample List ViewModel Factory ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠExample List ViewModel ĊĊĠĠĠ Ġprivate Ġval Ġadapter Ġ= ĠExample City Adapter () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this , ĠviewModel Factory ). get ( Example List ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġset ViewModel Listeners () ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . example _ fragment _ list , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġre cyclerView C ities . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġset View Listeners () ĊĠĠĠĠĠĠĠ Ġset ViewModel Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset ViewModel Observer s () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . ml d Network State . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanage Network State View ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . ml d C ities LiveData . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . replace C ities ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmanage Network State View ( network State : ĠNetwork State ) Ġ{ ĊĠĠĠĠĠĠĠ ĠtextView Network State . text Ġ= Ġnetwork State . network Status . name ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( network State . network Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork State . State . FAILED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Example Item Network State . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar Network . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Retry . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork State . State . RUNNING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Example Item Network State . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar Network . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Retry . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork State . State . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Example Item Network State . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset ViewModel Listeners () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . ml d Some Toast . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. getContent IfNot Handled ( this )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . ml d C ities From Local . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Data From Db . text Ġ= Ġ" Show Ġonline Ġdata " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Data From Db . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load C ities () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Data From Db . text Ġ= Ġ" Show Ġdb Ġdata " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Data From Db . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load C ities From Db () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset View Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġbutton Navigator Test . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fragment Clicked () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save C ities To Db () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Retry . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load C ities () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ ĠviewModel . show Some Toast () ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . ml d C ities LiveData . value !!. size Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load C ities () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġwatch Le aks () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwatch Le aks () Ġ{ ĊĠĠĠĠĠĠĠ ĠApp . ref Watcher . watch ( this ) ĊĠĠĠĠĠĠĠ ĠApp . ref Watcher . watch ( viewModel Factory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠExample List Fragment () ĊĠĠĠ Ġ} Ċ } Ċ