package Ġcom . demo . news app . base Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġcom . demo . news app . ui . fragment . HomePage Fragment Ċ import Ġcom . demo . news app . ui . fragment . Main Fragment Ċ Ċ class ĠFragment Navigator ( ĊĠĠĠ Ġprivate Ġval Ġfragment Manager : ĠFragment Manager , ĊĠĠĠ Ġprivate Ġvar Ġcontainer Id : ĠInt Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcur Fragment : ĠFragment ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġis Cur Main Fragment (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcur Fragment Ġis ĠMain Fragment ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Fragment ( tag : ĠString ): ĠFragment ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment Manager . find Fragment By Tag ( tag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġfind Fragment ( clazz : ĠClass < T >): ĠFragment ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġclazz . simple Name ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Fragment ( tag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠFragment > Ġget Fragment ( bundle : ĠBundle , Ġfragment Cl z : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfragment Ġ= Ġfind Fragment ( fragment Cl z ) ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġfragment Cl z . getMethod (" create ", ĠBundle :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Ġ= Ġmethod . invoke ( null , Ġbundle ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġfragment . java Class . simple Name ĊĠĠĠĠĠĠĠ Ġshow ( tag , Ġfragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow ( tag : ĠString , Ġfragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment Manager . beginTransaction (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur Fragment ?. let Ġ{ Ġcur Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide ( cur ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Fragment ( tag ) Ġ?: Ġadd ( container Id , Ġfragment , Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur Fragment Ġ= Ġfragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove (){ ĊĠĠĠĠĠĠĠ Ġfragment Manager . fragments . size ĊĠĠĠ Ġ} Ċ }