package Ġli ou . ray y uan . ebook search ta iw an . utils čĊč Ċ import Ġandroid . os . Handler č Ċ import Ġandroid . os . Looper č Ċ import Ġandroid . view . View č Ċ import Ġandroidx . annotation . MainThread č Ċ import Ġandroidx . fragment . app . Fragment č Ċ import Ġandroidx . lifecycle . Default Lifecycle Observer č Ċ import Ġandroidx . lifecycle . Lifecycle Owner č Ċ import Ġandroidx . view binding . View Binding č Ċ import Ġkotlin . properties . ReadOnly Property č Ċ import Ġkotlin . reflect . K Property čĊč Ċ class ĠFragment View Binding < T Ġ: ĠView Binding >( čĊĠĠĠ Ġprivate Ġval Ġbinding Action Ġ: Ġ( 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 Ġ{ čĊĠĠĠĠĠĠĠ Ġthis . view Binding ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġthis Ref . require View () čĊĠĠĠĠĠĠĠ Ġthis Ref . view Lifecycle Owner . lifecycle . add Observer ( lifecycle Observer ) čĊĠĠĠĠĠĠĠ Ġreturn Ġbinding Action ( view ). also Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . view Binding Ġ= Ġit čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġinner Ġclass ĠBinding Lifecycle Observer Ġ: ĠDefault Lifecycle Observer Ġ{ čĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmain Thread Handler Ġ= ĠHandler ( Looper . get Main Looper ()) čĊčĊĠĠĠĠĠĠĠ Ġ@ MainThread čĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Destroy ( owner : ĠLifecycle Owner ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner . lifecycle . remove Observer ( this ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFragment . view Lifecycle Owner Ġcall ĠL ifec y cl er Observer . on Destroy Ġbefore ĠFragment . on Destroy View (). čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThat 's Ġwhy Ġwe Ġneed Ġto Ġpost p one Ġreset Ġof Ġthe Ġview Binding čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Thread Handler . post Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Fragment View Binding . view Binding Ġ= Ġnull čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ }