package Ġcom . effective . android . wx rp . view . fragment . base Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . effective . android . wx rp . Build Config Ċ import Ġjava . util . ArrayList Ċ Ċ /** Ċ Ġ* Ġåı¯ çĽĳåĲ¬ fragment åı¯ è§Ĩ åĮĸ åıĺ åĬ¨ çļĦ fragment Ċ Ġ* Ġ Ġ åıĤèĢĥ Ġhttp :// www . pain cker . com / fragment - visibility Ċ Ġ* ĠCreated Ġby Ġy ummy L au Ġon Ġ 2 0 1 9 / 0 8 / 2 1 . Ċ Ġ* ĠEmail : Ġy ummy l . la u @ gmail . com Ċ Ġ* Ġblog : Ġy ummy la u . com Ċ Ġ*/ Ċ abstract Ġclass ĠVis ible Fragment Ġ: ĠFragment (), ĠView . On Attach State ChangeListener , ĠOn Fragment Visibility ChangeListener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Parent Activity Visible Ġ= Ġfalse ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ åı¯ è§ģ ï¼Ī Activity å¤Ħ äºİ åīį åı° ãĢģ Tab è¢« éĢī ä¸Ń ãĢģ Fragment è¢« æ·»åĬł ãĢģ Fragment æ²¡æľī éļĲèĹı ãĢģ Fragment . View å·²ç»ı Attach ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Visible Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Parent Fragment : ĠVis ible Fragment ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġm Listener Ġ= ĠArrayList < On Fragment Visibility ChangeListener >() ĊĊĠĠĠ Ġfun Ġadd On Visibility Changed Listener ( listener : ĠOn Fragment Visibility ChangeListener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( listener Ġ!= Ġnull Ġ&& Ġ! m Listener . contains ( listener )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Listener . add ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove On Visibility Changed Listener ( listener : ĠOn Fragment Visibility ChangeListener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( listener Ġ!= Ġnull Ġ&& Ġm Listener . contains ( listener )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Listener . remove ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġparent Fragment Ġ= Ġparent Fragment ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Fragment Ġis ĠVis ible Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Parent Fragment Ġ= Ġparent Fragment Ġas ĠVis ible Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Parent Fragment ?. add On Visibility Changed Listener ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcheck Visibility ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Parent Fragment ?. remove On Visibility Changed Listener ( this ) ĊĠĠĠĠĠĠĠ Ġsuper . on Detach () ĊĠĠĠĠĠĠĠ Ġcheck Visibility ( false ) ĊĠĠĠĠĠĠĠ Ġm Parent Fragment Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġon Activity Visibility Changed ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġon Activity Visibility Changed ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġon Activity Visibility Changed ( visible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Parent Activity Visible Ġ= Ġvisible ĊĠĠĠĠĠĠĠ Ġcheck Visibility ( visible ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment Visibility Changed ( visible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Visibility ( visible ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġview . add On Attach State ChangeListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Hidden Changed ( hidden : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Hidden Changed ( hidden ) ĊĠĠĠĠĠĠĠ Ġcheck Visibility ( hidden ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTab åĪĩæį¢ æĹ¶ ä¼ļ åĽŀè°ĥ æŃ¤ æĸ¹æ³ķ ãĢĤ å¯¹äºİ æ²¡æľī Tab çļĦ é¡µéĿ¢ ï¼Į [ Fragment . getUser Visible Hint ] é»ĺè®¤ä¸º true ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠsetUser Visible Hint ( isVisible To User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setUser Visible Hint ( isVisible To User ) ĊĠĠĠĠĠĠĠ Ġcheck Visibility ( isVisible To User ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Attached To Window ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Visibility ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Detached From Window ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġv . remove On Attach State ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġcheck Visibility ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ£Ģ æŁ¥ åı¯ è§ģ æĢ§ æĺ¯åĲ¦ åıĺåĮĸ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Ġåı¯ è§ģ æĢ§ æľŁ æľĽ çļĦåĢ¼ ãĢĤ åıªæľī å½ĵåīį åĢ¼ åĴĮ expected ä¸įåĲĮ ï¼Į æīį éľĢè¦ģ åģļ åĪ¤æĸŃ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Visibility ( expected : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Ġ== Ġm Visible ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġparent Visible Ġ= Ġif Ġ( m Parent Fragment Ġ== Ġnull ) Ġm Parent Activity Visible Ġelse Ġm Parent Fragment ?. is Fragment Visible () ĊĠĠĠĠĠĠĠ Ġval Ġsuper Visible Ġ= Ġsuper . isVisible () ĊĠĠĠĠĠĠĠ Ġval Ġhint Visible Ġ= Ġuser Visible Hint ĊĠĠĠĠĠĠĠ Ġval Ġvisible Ġ= Ġparent Visible Ġ!= Ġnull Ġ&& Ġparent Visible Ġ&& Ġsuper Visible Ġ&& Ġhint Visible ĊĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG Ġ&& Ġm Parent Fragment Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Log Fragment ", ĠString . format (" ==> Ġcheck Visibility Ġ= Ġ% s Ġ Ġ( Ġparent :% s Ġ= Ġ% s , Ġsuper : Ġ= Ġ% s , Ġhint :% s Ġ= Ġ% s Ġ) ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisible , Ġm Parent Fragment ?. java Class ?. simple Name , Ġparent Visible , Ġsuper Visible , Ġjava Class . simple Name , Ġhint Visible )) ĊĠĠĠĠĠĠĠ Ġif Ġ( visible Ġ!= Ġm Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Visible Ġ= Ġvisible ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Visibility Changed ( m Visible ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġm Listener . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġon Visibility Changed ( visible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( fragment Visibility Changed Listener Ġin Ġm Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Visibility Changed Listener . on Fragment Visibility Changed ( visible ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ åı¯ è§ģ ï¼Ī Activity å¤Ħ äºİ åīį åı° ãĢģ Tab è¢« éĢī ä¸Ń ãĢģ Fragment è¢« æ·»åĬł ãĢģ Fragment æ²¡æľī éļĲèĹı ãĢģ Fragment . View å·²ç»ı Attach ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Fragment Visible (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Visible ĊĠĠĠ Ġ} ĊĊ Ċ }