/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 Ġ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 Ġandroidx . fragment . app Ċ Ċ import Ġandroidx . annotation . MainThread Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Provider . Android ViewModel Factory Ċ import Ġandroidx . lifecycle . ViewModel Provider . Factory Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġproperty Ġdelegate Ġto Ġaccess ĠActivity 's Ġ[ ViewModel ], Ġif Ġ[ factory ] Ġis Ġspecified Ċ Ġ* Ġit Ġwill Ġbe Ġused Ġto Ġcreate Ġ[ ViewModel ] Ġfirst Ġtime . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġclass ĠMy Fragment Ġ: ĠFragment () Ġ{ Ċ Ġ* ĠĠĠĠ Ġval Ġview model : ĠNY ViewModel Ġby Ġview models () Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠThis Ġproperty Ġcan Ġbe Ġaccessed Ġonly Ġafter Ġthis ĠFragment Ġis Ġattached Ġi . e ., Ġafter Ċ Ġ* Ġ[ Fragment . on Attach ()], Ġand Ġaccess Ġprior Ġto Ġthat Ġwill Ġresult Ġin ĠIllegalArgumentException . Ċ Ġ*/ Ċ @ MainThread Ċ inline Ġfun Ġ< re ified ĠVM Ġ: ĠViewModel > ĠFragment . view Models ( factory : ĠFactory ? Ġ= Ġnull ): ĠLazy < VM > Ġ= ĊĠĠĠ ĠFragment ViewModel Lazy ( this , ĠVM :: class , Ġfactory ) Ċ Ċ /** Ċ Ġ* ĠAn Ġimplementation Ġof Ġ[ Lazy ] Ġused Ġby Ġ[ Fragment . view Models ] Ġtied Ġto Ġthe Ġgiven Ġ[ fragment ], Ċ Ġ* Ġ[ viewModel Class ], Ġ[ factory ] Ċ Ġ*/ Ċ class ĠFragment ViewModel Lazy < VM Ġ: ĠViewModel >( ĊĠĠĠ Ġprivate Ġval Ġfragment : ĠFragment , ĊĠĠĠ Ġprivate Ġval ĠviewModel Class : ĠK Class < VM >, ĊĠĠĠ Ġprivate Ġval Ġfactory : ĠFactory ? Ċ ) Ġ: ĠLazy < VM > Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcached : ĠVM ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġvalue : ĠVM ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠviewModel Ġ= Ġcached ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= Ġfragment . activity ?. application ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" ViewModel Ġcan Ġbe Ġaccessed Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" only Ġwhen ĠFragment Ġis Ġattached ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Factory Ġ= Ġfactory Ġ?: ĠAndroid ViewModel Factory . getInstance ( application ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( fragment , Ġresolved Factory ). get ( viewModel Class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Ġ= ĠviewModel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠviewModel ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Initialized () Ġ= Ġcached Ġ!= Ġnull Ċ } Ċ