package Ġcom . val h alla . lol champ viewer . ui . core Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Id Res Ċ import Ġandroidx . annotation . MainThread Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Default Lifecycle Observer Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġkotlin . properties . ReadOnly Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ fun Ġ< T Ġ: ĠView > Ġbind View (@ Id Res Ġid : ĠInt ): ĠFragment View Binding Property < T > Ġ= ĊĠĠĠ ĠFragment View Binding Property ( id ) Ċ Ċ fun ĠFragment . onClick (@ Id Res Ġid : ĠInt , ĠonClick : Ġ( View ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġview ?. findViewById < View >( id )?. setOnClickListener ( onClick ) Ċ } Ċ Ċ class ĠFragment View Binding Property < T Ġ: ĠView >( ĊĠĠĠ Ġ@ Id Res Ġprivate Ġval Ġview Id : ĠInt Ċ ) Ġ: ĠReadOnly Property < Fragment , ĠT ?> Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġview : ĠT ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Assigned : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġlifecycle Observer Ġ= ĠBinding Lifecycle Observer () ĊĊĠĠĠ Ġ@ MainThread ĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠFragment , Ġproperty : ĠK Property < *> ): ĠT ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Assigned ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis Ref . view Lifecycle Owner . lifecycle . add Observer ( lifecycle Observer ) ĊĊĠĠĠĠĠĠĠ Ġview Ġ= Ġthis Ref . require View (). findViewById ( view Id ) ĊĠĠĠĠĠĠĠ Ġis Assigned Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠBinding Lifecycle Observer Ġ: ĠDefault Lifecycle Observer Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Destroy ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner . lifecycle . remove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Assigned Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }