package Ġcom . ch ic la im . play . android Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroidx . appcompat . app . ActionBar Drawer Toggle Ċ import Ġandroidx . core . util . containsKey Ċ import Ġandroidx . core . util . forEach Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . ui .* Ċ import Ġcom . ch ic la im . play . android . base . Base Binding Activity Ċ import Ġcom . ch ic la im . play . android . databinding . Activity Main Binding Ċ import Ġcom . ch ic la im . play . android . funcs . article . Article Fragment Ċ import Ġcom . ch ic la im . play . android . funcs . project . Project Fragment Ċ import Ġcom . ch ic la im . play . android . funcs . user . Me Fragment Ċ import Ġcom . ch ic la im . play . android . funcs . user . login . Login Activity Ċ Ċ /** Ċ Ġ* Ġ ä¸» é¡µéĿ¢ Ċ Ġ* Ċ Ġ* Ġ@ author Ġch ic la im @ google . com Ċ Ġ*/ Ċ class ĠMainActivity Ġ: ĠBase Binding Activity < Activity Main Binding >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCURRENT _ POSITION Ġ= Ġ" current Position " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġtab Position Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġfragments Ġ= ĠSparse Array < Fragment >( 3 ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Id () Ġ= ĠR . layout . activity _ main ĊĊĠĠĠ Ġprivate Ġfun Ġretrieve Fragment ( tag : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġfragment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . find Fragment By Tag ( tag )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠArticle Fragment Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragments . put ( R . id . navigation _ home , Ġfragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠProject Fragment Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragments . put ( R . id . navigation _ project , Ġfragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMe Fragment Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragments . put ( R . id . navigation _ me , Ġfragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Fragments ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretrieve Fragment ( Article Fragment :: class . java . simple Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretrieve Fragment ( Project Fragment :: class . java . simple Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretrieve Fragment ( Me Fragment :: class . java . simple Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! fragments . containsKey ( R . id . navigation _ home )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragments . put ( R . id . navigation _ home , ĠArticle Fragment ()) ĊĠĠĠĠĠĠĠ Ġif Ġ(! fragments . containsKey ( R . id . navigation _ project )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragments . put ( R . id . navigation _ project , ĠProject Fragment ()) ĊĠĠĠĠĠĠĠ Ġif Ġ(! fragments . containsKey ( R . id . navigation _ me )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragments . put ( R . id . navigation _ me , ĠMe Fragment ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Position Ġ= ĠsavedInstanceState . getInt ( CURRENT _ POSITION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinit Fragments ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= Ġrequire Data Binding () ĊĊĠĠĠĠĠĠĠ Ġval Ġaction Bar Drawer Toggle Ġ= ĠAction Bar Drawer Toggle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . drawer Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . toolbar , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . navigation _ drawer _ open , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . navigation _ drawer _ close ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . drawer Layout . add Drawer Listener ( action Bar Drawer Toggle ) ĊĠĠĠĠĠĠĠ Ġaction Bar Drawer Toggle . sync State () ĊĊĊĠĠĠĠĠĠĠ Ġbinding . drawer Navigation View . set Navigation ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . itemId ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . navigation _ home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠLogin Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ set Navigation ItemSelected Listener Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . bottom Navigation . setOn Navigation ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . toolbar . title Ġ= Ġit . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Position Ġ= Ġfragments . indexOf Key ( it . itemId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Fragment ( fragments [ it . itemId ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ é¦ĸ æ¬¡ ĠI U Ġ åĬłè½½ ï¼Į è§¦åıĳ ĠOn Navigation ItemSelected Listener ĠæĽ´æĸ° Ġtitle ĊĠĠĠĠĠĠĠ Ġbinding . bottom Navigation . selected ItemId Ġ= Ġfragments . key At ( tab Position ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State . put Int ( CURRENT _ POSITION , Ġtab Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġswitch Fragment ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment . isVisible ) Ġreturn ĊĠĠĠĠĠĠĠ Ġfragments . forEach Ġ{ Ġ_, Ġ_ fragment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ fragment . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. hide (_ fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit Allow ing State Loss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! fragment . is Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( R . id . fragment _ container _ view , Ġfragment , Ġfragment . java Class . simple Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit Allow ing State Loss () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit Allow ing State Loss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ