/** Ċ Ġ* ĠAuthor ĠE ug ene ĠBrown Ċ App : ĠUser List Ċ Class : ĠDetails Fragment Ċ Usage : Ġpresents Ġthe Ġgrid view Ġlayout Ġof Ġimages Ġfrom Ġcharacter Ċ uses ĠViewModel Ġand Ġobserver Ġpattern Ġto Ġsend Ġdata Ġto Ġadapter Ċ Ġuses Ġview Ġbinding Ċ Ġ**/ Ċ package Ġcom . example . user list . view ĊĊ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . example . user list . databinding . Fragment Details Binding Ċ import Ġcom . example . user list . model . Repository Ċ import Ġcom . example . user list . model . com ics . Results Ċ import Ġcom . example . user list . model . ret rofit API . Ret rofit Service Ċ import Ġcom . example . user list . view . Adapter . Com ic Grid Adapter Ċ import Ġcom . example . user list . view model . User ViewModel Ċ import Ġcom . example . user list . view model . ViewModel Factory Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠDetails Fragment Ġ: ĠFragment (){ ĊĊĠĠĠ Ġ// ĠView ĠBinding ĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Details Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Over View Fragment " ĊĊĊĠĠĠ Ġ// ĠCreate Ġa ĠviewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠUser ViewModel ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġretrofit Service : ĠRet rofit Service ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġfactory : ĠViewModel Factory ĊĠĠĠ Ġ// create Ġmutable Ġlist ĊĠĠĠ Ġprivate Ġ Ġvar Ġusers Ġ= Ġmutable ListOf < Results >() ĊĊĊĠĠĠ Ġprivate Ġ Ġvar Ġid Char : Int Ġ= Ġ 0 ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġcomponent . inject Details ( this ) ĊĠĠĠĠĠĠĠ Ġ// from Ġbundle */ ĊĠĠĠĠĠĠĠ Ġ// object Ġfrom Ġmain Ġlist Ġcard view Ġinstance ĊĠĠĠĠĠĠĠ Ġval Ġdetails ArrayList Ġ= Ġrequire Arguments (). getInt (" overview _ data ") ĊĠĠĠĠĠĠĠ Ġthis . id Char Ġ= Ġdetails ArrayList ĊĊĠĠĠĠĠĠĠ Ġ// binding Ġview ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Details Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġbinding . root ĊĊĠĠĠĠĠĠĠ Ġfactory Ġ= ĠViewModel Factory ( Repository ( ret rofit Service )) Ċ Ċ // use Ġview Ġmodel Ġprovider Ġfactory Ġfor Ġparam ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( User ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel . getAll Com ics ( this . id Char ) ĊĠĠĠĠĠĠĠ Ġfragment Text Update Observer () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠObserver Ġis Ġwaiting Ġfor ĠviewModel Ġto Ġupdate Ġour ĠUI ĊĠĠĠ Ġprivate Ġfun Ġfragment Text Update Observer () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠviewModel . com ic List . observe ( view Lifecycle Owner , Ġ{ Ġcom ic List Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . grid View . adapter Ġ= ĠCom ic Grid Adapter ( com ic List ) ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . errorMessage . observe ( view Lifecycle Owner ,{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" error : Ġ" Ġ+ Ġit ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊ Ċ }