/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . ĠD y lan ĠC ai Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" unused ") Ċ Ċ package Ġcom . dy l anc . view binding . non reflection Ċ Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . activity . Component Activity Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġandroidx . view binding . View Binding Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġkotlin . properties . ReadOnly Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ /** Ċ Ġ* Ġ@ author ĠD y lan ĠC ai Ċ Ġ*/ Ċ Ċ fun Ġ< VB Ġ: ĠView Binding > ĠComponent Activity . binding ( inflate : Ġ( LayoutInflater ) Ġ-> ĠVB ) Ġ= Ġlazy Ġ{ ĊĠ Ġinf late ( layout Inflater ). also Ġ{ ĊĠĠĠ ĠsetContentView ( it . root ) ĊĠĠĠ Ġif Ġ( this Ġis ĠView Data Binding ) Ġlifecycle Owner Ġ= Ġthis @ binding ĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< VB Ġ: ĠView Binding > ĠFragment . binding ( bind : Ġ( View ) Ġ-> ĠVB ) Ġ= ĠFragment Binding Delegate ( bind ) Ċ Ċ fun Ġ< VB Ġ: ĠView Binding > ĠDialog . binding ( inflate : Ġ( LayoutInflater ) Ġ-> ĠVB ) Ġ= Ġlazy Ġ{ ĊĠ Ġinf late ( layout Inflater ). also Ġ{ ĠsetContentView ( it . root ) Ġ} Ċ } Ċ Ċ fun Ġ< VB Ġ: ĠView Binding > ĠViewGroup . binding ( ĊĠ Ġinf late : Ġ( LayoutInflater , ĠViewGroup ?, ĠBoolean ) Ġ-> ĠVB , ĊĠ Ġattach To Parent : ĠBoolean Ġ= Ġtrue Ċ ) Ġ= Ġlazy Ġ{ ĊĠ Ġinf late ( LayoutInflater . from ( context ), Ġif Ġ( attach To Parent ) Ġthis Ġelse Ġnull , Ġattach To Parent ) Ċ } Ċ Ċ fun Ġ< VB Ġ: ĠView Binding > ĠTab Layout . Tab . set Custom View ( ĊĠ Ġinf late : Ġ( LayoutInflater ) Ġ-> ĠVB , ĊĠ Ġon BindView : ĠVB . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠ Ġcustom View Ġ= Ġinf late ( LayoutInflater . from ( parent !!. context )). apply ( on BindView ). root Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠVB Ġ: ĠView Binding > ĠTab Layout . Tab . bind Custom View ( bind : Ġ( View ) Ġ-> ĠVB , Ġon BindView : ĠVB . () Ġ-> ĠUnit ) Ġ= ĊĠ Ġcustom View ?. let Ġ{ Ġbind ( it ). run ( on BindView ) Ġ} Ċ Ċ inline Ġfun ĠFragment . do On Destroy View ( cross inline Ġblock : Ġ() Ġ-> ĠUnit ) Ġ= ĊĠ Ġview Lifecycle Owner . lifecycle . add Observer ( object Ġ: ĠLifecycle Observer Ġ{ ĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠ Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠ Ġblock . invoke () ĊĠĠĠ Ġ} ĊĠ Ġ}) Ċ Ċ interface ĠBinding Lifecycle Owner Ġ{ ĊĠ Ġfun Ġon Destroy View Binding ( destroy ing Binding : ĠView Binding ) Ċ } Ċ Ċ class ĠFragment Binding Delegate < VB Ġ: ĠView Binding >( private Ġval Ġbind : Ġ( View ) Ġ-> ĠVB ) Ġ: ĠReadOnly Property < Fragment , ĠVB > Ġ{ ĊĠ Ġprivate Ġvar Ġbinding : ĠVB ? Ġ= Ġnull ĊĊĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠFragment , Ġproperty : ĠK Property < *> ): ĠVB Ġ{ ĊĠĠĠ Ġif Ġ( binding Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġbinding Ġ= Ġbind ( this Ref . require View ()). also Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠView Data Binding ) Ġit . lifecycle Owner Ġ= Ġthis Ref . view Lifecycle Owner ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġthis Ref . do On Destroy View Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ref Ġis ĠBinding Lifecycle Owner ) Ġthis Ref . on Destroy View Binding ( binding !! ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġbinding !! ĊĠ Ġ} Ċ }