/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 , ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ package Ġcom . k ang ra oo . base kt lib . tools Ċ Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . FragmentManager Ċ Ċ /** Ċ Ġ* ĠThis Ġprovides Ġmethods Ġto Ġhelp ĠActiv ities Ġload Ġtheir ĠUI . Ċ Ġ*/ Ċ object ĠU Fragment Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ` fragment ` Ġis Ġadded Ġto Ġthe Ġcontainer Ġview Ġwith Ġid Ġ` frame Id `. ĠThe Ġoperation Ġis ĊĠĠĠĠ Ġ* Ġperformed Ġby Ġthe Ġ` fragment Manager `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Fragment To Activity ( ĊĠĠĠĠĠĠĠ Ġfragment Manager : ĠFragment Manager , ĊĠĠĠĠĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠĠĠĠĠ Ġframe Id : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġtransaction . add ( frame Id , Ġfragment ) ĊĠĠĠĠĠĠĠ Ġtransaction . commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ æ²¡æľī fragment Ġ å°± åĪĽå»º æĸ°çļĦ ĊĠĠĠĠ Ġ* Ġ@ param Ġfragment Manager ĊĠĠĠĠ Ġ* Ġ@ param Ġfragment Id ĊĠĠĠĠ Ġ* Ġ@ param Ġmy Fragment ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠFragment > Ġget Fragment ( ĊĠĠĠĠĠĠĠ Ġfragment Manager : ĠFragment Manager , ĊĠĠĠĠĠĠĠ Ġfragment Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġmy Fragment : ĠT ĊĠĠĠ Ġ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfragment Ġ= Ġfragment Manager . find Fragment ById ( fragment Id ) Ġas ĠT ? ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Ġ= Ġmy Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Fragment To Activity ( fragment Manager , Ġfragment , Ġfragment Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠ Ġ/** ĊĠĠĠ Ġ// ĠĠĠĠ Ġ* Ġå¦Ĥæŀľ åİŁ æĿ¥çļĦ fragment ä¸į åĨį ä½¿çĶ¨ , åı¯çĶ¨ å¦Ĥä¸ĭ æĸ¹æ³ķ çĶ¨ æĸ°çļĦ æĽ¿æį¢ æĹ§ çļĦ , å¦Ĥæŀľ ä½łçļĦ fragment ä¾Ŀ æĹ§ è¦ģ ä½¿çĶ¨çļĦ è¯Ŀ ĠçĶ¨ Ġ{@ link Ġ# switch Fragment ( FragmentManager , Ġint , ĠFragment , ĠFragment )} Ġ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ* Ġ@ param Ġfragment Manager ĊĠĠĠ Ġ// ĠĠĠĠ Ġ* Ġ@ param Ġfragment Id ĊĠĠĠ Ġ// ĠĠĠĠ Ġ* Ġ@ param Ġmy Fragment ĊĠĠĠ Ġ// ĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĊĠĠĠ Ġ// ĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠ Ġ// ĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// ĠĠĠ Ġpublic Ġstatic Ġ Ġ< T Ġextends ĠFragment > T Ġreplace Fragment (@ NonNull ĠFragment Manager Ġfragment Manager , Ġ@ NonNull Ġint Ġfragment Id , Ġ@ NonNull ĠT Ġmy Fragment ){ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠCheck . checkNotNull ( fragment Manager ); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠCheck . checkNotNull ( fragment Id ); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠCheck . checkNotNull ( my Fragment ); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠT Ġfragment Ġ= Ġ( T ) fragment Manager . find Fragment ById ( fragment Id ); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Ġ= Ġmy Fragment ; ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġadd Fragment To Activity ( fragment Manager , Ġfragment , fragment Id ); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Ġ= Ġmy Fragment ; ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Transaction Ġtransaction Ġ= Ġfragment Manager . beginTransaction (); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . replace ( fragment Id , Ġfragment ); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . commit (); ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġreturn Ġfragment ; ĊĠĠĠ Ġ// ĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪĩæį¢ Ġfragment Ġ æĺ¾ç¤º ĊĠĠĠĠ Ġ* Ġ@ param Ġfragment Manager ĊĠĠĠĠ Ġ* Ġ@ param Ġfragment Id ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom ĊĠĠĠĠ Ġ* Ġ@ param Ġto ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T 1 > ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T 2 > ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠ Ġ</ T 2 ></ T 1 > Ġ*/ ĊĠĠĠ Ġfun Ġ< T 1 Ġ: ĠFragment ?, ĠT 2 Ġ: ĠFragment > Ġswitch Fragment ( ĊĠĠĠĠĠĠĠ Ġfragment Manager : ĠFragment Manager , ĊĠĠĠĠĠĠĠ Ġfragment Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġfrom : ĠT 1 ?, ĊĠĠĠĠĠĠĠ Ġto : ĠT 2 ĊĠĠĠ Ġ): ĠT 2 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġif Ġ( from Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! to . is Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . add ( fragment Id , Ġto ). commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . show ( to ). commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! to . is Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . hide ( from ). add ( fragment Id , Ġto ). commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . hide ( from ). show ( to ). commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġto ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ åİŁ æĿ¥çļĦ fragment ä¸į åĨį ä½¿çĶ¨ , åı¯çĶ¨ å¦Ĥä¸ĭ æĸ¹æ³ķ çĶ¨ æĸ°çļĦ æĽ¿æį¢ æĹ§ çļĦ , å¦Ĥæŀľ ä½łçļĦ fragment ä¾Ŀ æĹ§ è¦ģ ä½¿çĶ¨çļĦ è¯Ŀ ĠçĶ¨ Ġ[. switch Fragment ] Ġ Ġ} ĊĠĠĠĠ Ġ* Ġ@ param Ġfragment Manager ĊĠĠĠĠ Ġ* Ġ@ param Ġfragment Id ĊĠĠĠĠ Ġ* Ġ@ param Ġmy Fragment ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠFragment > Ġreplace Fragment ( ĊĠĠĠĠĠĠĠ Ġfragment Manager : ĠFragment Manager , ĊĠĠĠĠĠĠĠ Ġfragment Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġmy Fragment : ĠT ĊĠĠĠ Ġ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġreplace Fragment ( fragment Manager , Ġfragment Id , Ġmy Fragment , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ åİŁ æĿ¥çļĦ fragment ä¸į åĨį ä½¿çĶ¨ , åı¯çĶ¨ å¦Ĥä¸ĭ æĸ¹æ³ķ çĶ¨ æĸ°çļĦ æĽ¿æį¢ æĹ§ çļĦ , å¦Ĥæŀľ ä½łçļĦ fragment ä¾Ŀ æĹ§ è¦ģ ä½¿çĶ¨çļĦ è¯Ŀ ĠçĶ¨ Ġ[. switch Fragment ] Ġ Ġ} ĊĠĠĠĠ Ġ* Ġ@ param Ġfragment Manager ĊĠĠĠĠ Ġ* Ġ@ param Ġfragment Id ĊĠĠĠĠ Ġ* Ġ@ param Ġmy Fragment ĊĠĠĠĠ Ġ* Ġ@ param Ġneed AddTo Back Stack Ġæĺ¯åĲ¦ åı¯ä»¥ çĶ¨ back æĮī éĶ® éĢĢ æłĪ ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠFragment > Ġreplace Fragment ( ĊĠĠĠĠĠĠĠ Ġfragment Manager : ĠFragment Manager , ĊĠĠĠĠĠĠĠ Ġfragment Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġmy Fragment : ĠT , ĊĠĠĠĠĠĠĠ Ġneed AddTo Back Stack : ĠBoolean ĊĠĠĠ Ġ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġfragment Transaction . replace ( fragment Id , Ġmy Fragment ) ĊĠĠĠĠĠĠĠ Ġif Ġ( need AddTo Back Stack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . addTo Back Stack ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfragment Transaction . commit Allow ing State Loss () ĊĠĠĠĠĠĠĠ Ġreturn Ġmy Fragment ĊĠĠĠ Ġ} Ċ } Ċ