package Ġcom . android . app _ a qi . home ĊĊ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . transition . Transition Inflater Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . app . Shared Element Callback Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . view pager . widget . ViewPager Ċ import Ġandroidx . view pager . widget . ViewPager . Simple On Page ChangeListener Ċ import Ġcom . android . app _ a qi . R Ċ import Ġcom . android . app _ a qi . Shared ViewModel Ċ import Ġcom . google . android . material . bottom app bar . Bottom AppBar Ċ Ċ /** Ċ Ġ* ĠA Ġsimple Ġ[ Fragment ] Ġsubclass . Ċ Ġ* ĠUse Ġthe Ġ[ Home Fragment . newInstance ] Ġfactory Ġmethod Ġto Ċ Ġ* Ġcreate Ġan Ġinstance Ġof Ġthis Ġfragment . Ċ Ġ*/ Ċ class ĠHome Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġshared ViewModel : ĠShared ViewModel ĊĠĠĠ Ġprivate Ġvar Ġmenu Item Listener : ĠOn MenuItem ClickListener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbottom AppBar : ĠBottom AppBar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsite ViewPager : ĠView Pager ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsite ViewPager Adapter : ĠSite ViewPager Adapter ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġshared ViewModel Ġ= ĠViewModel Provider ( require Activity ()). get ( Shared ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġshared Element Enter Transition Ġ= ĠTransition Inflater . from ( require Context ()). inflate Transition ( R . transition . list _ to _ pager _ enter _ transition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġvar Ġview Ġ= Ġinflater . inflate ( R . layout . fragment _ home , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġsite ViewPager Ġ= Ġview . findViewById ( R . id . vp _ main ) ĊĠĠĠĠĠĠĠ Ġbottom AppBar Ġ= Ġview . findViewById ( R . id . bottom _ app _ bar ) ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit App bar () ĊĠĠĠĠĠĠĠ Ġinit ViewPager () ĊĠĠĠĠĠĠĠ Ġprepare Transitions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Transitions () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Enter Shared Element Callback ( object Ġ: ĠShared Element Callback (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Map Shared Elements ( names : ĠMutable List < String > ?, Ġshared Elements : ĠMutable Map < String , ĠView > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoc ate Ġthe Ġimage Ġview Ġat Ġthe Ġprimary Ġfragment Ġ( the ĠImage Fragment Ġthat Ġis Ġcurrently ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġvisible ). ĠTo Ġlocate Ġthe Ġfragment , Ġcall Ġinstantiate Item Ġwith Ġthe Ġselection Ġposition . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAt Ġthis Ġstage , Ġthe Ġmethod Ġwill Ġsimply Ġreturn Ġthe Ġfragment Ġat Ġthe Ġposition Ġand Ġwill ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġcreate Ġa Ġnew Ġone . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Fragment Ġ= Ġsite ViewPager Adapter . instantiate Item ( site ViewPager , Ġshared ViewModel . current Pos ) Ġas ĠFragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġcurrent Fragment . view Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMap Ġthe Ġfirst Ġshared Ġelement Ġname Ġto Ġthe Ġchild ĠImageView . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Elements ! ![ names ! ![ 0 ]] Ġ= Ġview . findViewById ( R . id . cl _ root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit App bar () Ġ{ ĊĠĠĠĠĠĠĠ Ġbottom AppBar . replace Menu ( R . menu . bottom _ menu ) ĊĠĠĠĠĠĠĠ Ġbottom AppBar . setOn MenuItem ClickListener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . show _ list Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( child FragmentManager . fragments [ 0 ]. is Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Listener ?. on MenuItem Click ( child FragmentManager . fragments [ 0 ]. require View (). findViewById ( R . id . cl _ root ), Ġshared ViewModel . current Pos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit ViewPager () Ġ{ ĊĠĠĠĠĠĠĠ Ġshared ViewModel . follow ed Site ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsite ViewPager Adapter Ġ= ĠSite ViewPager Adapter ( it Ġ, Ġfm Ġ= Ġchild FragmentManager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsite ViewPager . adapter Ġ= Ġsite ViewPager Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsite ViewPager . currentItem Ġ= Ġshared ViewModel . current Pos ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsite ViewPager . add On Page ChangeListener ( object Ġ: ĠSimple On Page ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared ViewModel . current Pos Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġis ĠHome Fragment . On MenuItem ClickListener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item Listener Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ("$ context Ġmust Ġimplement ĠOn MenuItem ClickListener ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detach () ĊĠĠĠĠĠĠĠ Ġmenu Item Listener Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn MenuItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon MenuItem Click ( item View : ĠView , Ġposition : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠHome Fragment () ĊĠĠĠ Ġ} Ċ } Ċ