package Ġtech . ro ony x . android _ starter . extension Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġandroidx . view binding . View Binding Ċ import Ġkotlin . properties . ReadOnly Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ class ĠView Binding Property < T Ġ: ĠView Binding >( ĊĠĠĠ Ġprivate Ġval Ġbind : Ġ( view : ĠView ) Ġ-> ĠT Ċ ) Ġ: ĠReadOnly Property < Fragment , ĠT > Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġview Binding : ĠT ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġlifecycle Observer Ġ= ĠBinding Lifecycle Observer () ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠFragment , Ġproperty : ĠK Property < *> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binding ?. let Ġ{ Ġreturn Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġthis Ref . require View () ĊĠĠĠĠĠĠĠ Ġthis Ref . view Lifecycle Owner . lifecycle . add Observer ( lifecycle Observer ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbind ( view ). also Ġ{ Ġview Binding Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠBinding Lifecycle Observer Ġ: ĠLifecycle Observer Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmain Handler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĊĠĠĠĠĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Destroy ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFragment . view Lifecycle Owner Ġcall ĠLifecycle Observer . on Destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbefore ĠFragment . on Destroy View (). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThat 's Ġwhy Ġwe Ġneed Ġto Ġpost p one Ġreset Ġof Ġthe Ġview Binding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner . lifecycle . remove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" View Binding Property ", Ġ" Clear ĠView Binding ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T Ġ: ĠView Binding > Ġview Binding ( ĊĠĠĠ Ġbind : Ġ( view : ĠView ) Ġ-> ĠT Ċ ): ĠReadOnly Property < Fragment , ĠT > Ġ= ĠView Binding Property ( bind )