/* Ċ Ġ* Ġ ĠCopyright Ġ 2 0 1 9 , ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ġ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . example . android . mars re ale state . detail Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . example . android . mars re ale state . databinding . Fragment Detail Binding Ċ import Ġcom . example . android . mars re ale state . network . M ars Property Ċ Ċ /** Ċ Ġ* ĠThis Ġ[ Fragment ] Ġshows Ġthe Ġdetailed Ġinformation Ġabout Ġa Ġselected Ġpiece Ġof ĠM ars Ġreal Ġest ate . Ċ Ġ* ĠIt Ġsets Ġthis Ġinformation Ġin Ġthe Ġ[ Detail ViewModel ], Ġwhich Ġit Ġgets Ġas Ġa ĠParcel able Ġproperty Ċ Ġ* Ġthrough ĠJet pack ĠNavigation 's ĠSafe Args . Ċ Ġ*/ Ċ class ĠDetail Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġto Ġhave Ġthe Ġfragment Ġinstantiate Ġits Ġuser Ġinterface Ġview . ĠThis Ġwill Ġbe Ġcalled Ġbetween ĊĠĠĠĠ Ġ* Ġ[ onCreate ] Ġand Ġ[ on Activity Created ]. ĠFirst Ġwe Ġinitialize Ġour Ġ[ Application ] Ġvariable ĊĠĠĠĠ Ġ* Ġ` val Ġapplication ` Ġto Ġthe Ġapplication Ġthat Ġowns Ġthis Ġactivity . ĠWe Ġinitialize Ġour ĊĠĠĠĠ Ġ* Ġ[ Fragment Detail Binding ] Ġvariable Ġ` val Ġbinding ` Ġby Ġhaving Ġthe Ġ[ Fragment Detail Binding . inflate ] ĊĠĠĠĠ Ġ* Ġmethod Ġuse Ġour Ġ[ LayoutInflater ] Ġparameter Ġ[ in flater ] Ġto Ġinf late Ġits Ġassociated Ġlayout Ġfile ĊĠĠĠĠ Ġ* Ġlayout / fragment _ detail . xml Ġand Ġreturn Ġa Ġbinding Ġto Ġthat Ġview . ĠWe Ġset Ġthe ĠLifecycle Owner Ġthat ĊĠĠĠĠ Ġ* Ġshould Ġbe Ġused Ġfor Ġob serving Ġchanges Ġof ĠLive Data Ġin Ġ` binding ` Ġto Ġ` this `. ĠWe Ġinitialize ĊĠĠĠĠ Ġ* Ġour Ġ[ M ars Property ] Ġvariable Ġ` val Ġm ars Property ` Ġby Ġusing Ġthe Ġ` from Bundle ` Ġmethod Ġof Ġthe ĊĠĠĠĠ Ġ* Ġ[ Detail Fragment Args ] Ġwhich Ġis Ġpassing Ġsafe Ġargs Ġto Ġus Ġto Ġretrieve Ġthe Ġarguments Ġfrom Ġthe ĊĠĠĠĠ Ġ* Ġarguments Ġpassed Ġto Ġour Ġfragment , Ġthen Ġretrieving Ġthe Ġ[ M ars Property ] Ġstored Ġunder Ġthe Ġkey ĊĠĠĠĠ Ġ* Ġ` selected Property ` Ġfrom Ġthat ĠHashMap . ĠWe Ġnext Ġinitialize Ġour Ġ[ Detail ViewModel Factory ] Ġvariable ĊĠĠĠĠ Ġ* Ġ` val ĠviewModel Factory ` Ġwith Ġan Ġinstance Ġwhich Ġwill Ġprovide Ġ` mars Property ` Ġas Ġthe Ġ[ M ars Property ] ĊĠĠĠĠ Ġ* Ġand Ġ` application ` Ġas Ġthe Ġ[ Application ] Ġwhen Ġit Ġis Ġasked Ġto Ġconstruct Ġa Ġ[ Detail ViewModel ]. ĊĠĠĠĠ Ġ* ĠWe Ġthen Ġset Ġthe Ġ` viewModel ` Ġvariable Ġof Ġ` binding ` Ġto Ġthe Ġsingleton Ġinstance Ġof Ġ[ Detail ViewModel ] ĊĠĠĠĠ Ġ* Ġthat Ġa Ġ[ ViewModel Provider ] Ġconstructed Ġto Ġuse Ġ` this ` Ġas Ġthe Ġ` ViewModel Store Owner `, Ġand ĊĠĠĠĠ Ġ* Ġ` viewModel Factory ` Ġas Ġthe ĠFactory Ġto Ġuse Ġto Ġinstantiate Ġa Ġnew ĠViewModel Ġif Ġnecessary Ġreturns ĊĠĠĠĠ Ġ* Ġwhen Ġwe Ġcall Ġits Ġ` get ` Ġmethod Ġfor Ġthe Ġ[ Detail ViewModel ] Ġclass . ĠFinally Ġwe Ġreturn Ġthe Ġout erm ost ĊĠĠĠĠ Ġ* Ġ[ View ] Ġin Ġthe Ġlayout Ġfile Ġassociated Ġwith Ġ` binding ` Ġto Ġthe Ġcaller . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinflater ĠThe Ġ[ LayoutInflater ] Ġobject Ġthat Ġcan Ġbe Ġused Ġto Ġinf late ĊĠĠĠĠ Ġ* Ġany Ġviews Ġin Ġthe Ġfragment . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontainer ĠIf Ġnon - null , Ġthis Ġis Ġthe Ġparent Ġview Ġthat Ġthe Ġfragment 's ĊĠĠĠĠ Ġ* ĠUI Ġwill Ġbe Ġattached Ġto . ĠThe Ġfragment Ġshould Ġnot Ġadd Ġthe Ġview Ġitself , ĊĠĠĠĠ Ġ* Ġbut Ġthis Ġcan Ġbe Ġused Ġto Ġgenerate Ġthe ĠLayout Params Ġof Ġthe Ġview . ĊĠĠĠĠ Ġ* Ġ@ param ĠsavedInstanceState ĠIf Ġnon - null , Ġthis Ġfragment Ġis Ġbeing Ġre - construct ed ĊĠĠĠĠ Ġ* Ġfrom Ġa Ġprevious Ġsaved Ġstate Ġas Ġgiven Ġhere . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturn Ġthe Ġ[ View ] Ġfor Ġthe Ġfragment 's ĠUI , Ġor Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Red undant Nullable ReturnType ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġapplication Ġ: ĠApplication Ġ= Ġrequire NotNull ( activity ). application ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠFragment Detail Binding . inflate ( in flater ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġval Ġm ars Property Ġ: ĠM ars Property Ġ= ĠDetail Fragment Args ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from Bundle ( require Arguments ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. selected Property ĊĠĠĠĠĠĠĠ Ġval ĠviewModel Factory Ġ= ĠDetail ViewModel Factory ( mars Property , Ġapplication ) ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠViewModel Provider ( this , ĠviewModel Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( Detail ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} Ċ }