package Ġcom . wa 2 c . android . cif sd ocument spro vider . presentation . ui . common Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Animation Ċ import Ġandroid . view . animation . Linear Interpolator Ċ import Ġandroid . view . animation . Rotate Animation Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . Id Res Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . view . get Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . databinding . Binding Adapter Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . Nav Directions Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . wa 2 c . android . cif sd ocument spro vider . R Ċ import Ġkotlin . properties . ReadOnly Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ // Ġref : Ġhttps :// sat osh un . github . io / 2 0 2 0 / 0 1 / fragment - view - memory - leak / Ċ // ĠĠĠĠĠ Ġhttps :// sat osh un . github . io / 2 0 1 9 / 0 4 / jet pack - coroutine - support / Ċ Ċ fun Ġ< T Ġ: ĠView Data Binding > ĠAppCompatActivity . view Binding (): ĠReadOnly Property < AppCompatActivity , ĠT ?> Ġ{ ĊĠĠĠ Ġreturn ĠReadOnly Property < AppCompatActivity , ĠT ?> Ġ{ Ġthis Ref , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġthis Ref . findViewById < ViewGroup >( android . R . id . content )[ 0 ] ĊĠĠĠĠĠĠĠ ĠData Binding Util . bind < T >( view )?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . lifecycle Owner Ġ= Ġthis Ref ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T Ġ: ĠView Data Binding > ĠFragment . view Binding (): ĠReadOnly Property < Fragment , ĠT ?> Ġ{ ĊĠĠĠ Ġreturn Ġobject Ġ: ĠReadOnly Property < Fragment , ĠT ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠFragment , Ġproperty : ĠK Property < *> ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġthis Ref . view Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠData Binding Util . bind < T >( view )?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . lifecycle Owner Ġ= Ġthis Ref . view Lifecycle Owner ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠNavigate Ċ Ġ*/ Ċ fun ĠFragment . navigate Safe ( directions : ĠNav Directions ) Ġ{ ĊĠĠĠ Ġval Ġnav Controller Ġ= Ġfind Nav Controller () ĊĠĠĠ Ġval Ġaction Id Ġ= Ġdirections . action Id ĊĠĠĠ Ġval Ġdestination Id Ġ= Ġnav Controller . current Destination ?. getAction ( action Id )?. destination Id ĊĠĠĠĠĠĠĠ Ġ?: Ġnav Controller . graph . getAction ( action Id )?. destination Id ĊĠĠĠ Ġif Ġ( destination Id Ġ!= Ġnull Ġ&& Ġnav Controller . current Destination ?. id Ġ!= Ġdestination Id ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnav Controller . navigate ( directions ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠFragment . navigate Back (@ Id Res Ġdestination Id : ĠInt ? Ġ= Ġnull , Ġinclusive : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠ Ġif Ġ( destination Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack ( destination Id , Ġinclusive ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter (" visible ") Ċ fun ĠView . isVisible ( visible : ĠBoolean ) Ġ{ ĊĠĠĠ Ġthis . isVisible Ġ= Ġvisible Ċ } ĊĊ Ċ /** Ċ Ġ* ĠShow Ġtoast Ċ Ġ*/ Ċ fun ĠContext . toast (@ String Res Ġtext Id : ĠInt ) Ġ{ ĊĠĠĠ ĠToast . makeText ( this , Ġtext Id , ĠToast . LENGTH _ SHORT ). show () Ċ } Ċ Ċ /** Ċ Ġ* ĠShow Ġtoast Ċ Ġ*/ Ċ fun ĠContext . toast ( text : ĠCharSequence ) Ġ{ ĊĠĠĠ ĠToast . makeText ( this , Ġtext , ĠToast . LENGTH _ SHORT ). show () Ċ } Ċ Ċ /** Ċ Ġ* ĠShow Ġtoast Ċ Ġ*/ Ċ fun ĠFragment . toast (@ String Res Ġtext Id : ĠInt ) Ġ{ ĊĠĠĠ ĠToast . makeText ( require Context (), Ġtext Id , ĠToast . LENGTH _ SHORT ). show () Ċ } Ċ Ċ /** Ċ Ġ* ĠShow Ġtoast Ċ Ġ*/ Ċ fun ĠFragment . toast ( text : ĠCharSequence ) Ġ{ ĊĠĠĠ ĠToast . makeText ( require Context (), Ġtext , ĠToast . LENGTH _ SHORT ). show () Ċ } ĊĊ Ċ /** Ċ Ġ* ĠStart Ġloading Ġanimation Ċ Ġ*/ Ċ fun ĠMenuItem . start Loading Animation () Ġ{ ĊĠĠĠ Ġstop Loading Animation () ĊĠĠĠ Ġset Action View ( R . layout . layout _ menu _ item _ reload ) ĊĠĠĠ Ġaction View ?. animation Ġ= ĠRotate Animation ( ĊĠĠĠĠĠĠĠĠ 0 . 0 f , Ġ 3 6 0 . 0 f , ĊĠĠĠĠĠĠĠ ĠAnimation . REL ATIVE _ TO _ SELF , Ġ 0 . 5 f , ĊĠĠĠĠĠĠĠ ĠAnimation . REL ATIVE _ TO _ SELF , Ġ 0 . 5 f ĊĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġrepeat Count Ġ= ĠAnimation . INF IN ITE ĊĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠLinear Interpolator () ĊĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠStop Ġloading Ġanimation Ċ Ġ*/ Ċ fun ĠMenuItem . stop Loading Animation () Ġ{ ĊĠĠĠ Ġaction View ?. animation ?. cancel () ĊĠĠĠ Ġaction View Ġ= Ġnull Ċ }