package Ġcom . hu anch eng fly . ti eba . post . fragments Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . Call Super Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġbutter knife . B utter Kn ife Ċ import Ġbutter knife . Un binder Ċ import Ġcom . hu anch eng fly . ti eba . post . interfaces . Back Handled Interface Ċ import Ġcom . hu anch eng fly . ti eba . post . interfaces . Refresh able Ċ import Ġcom . hu anch eng fly . ti eba . post . utils . App Preferences Utils Ċ import Ġcom . hu anch eng fly . ti eba . post . utils . Handle Back Util Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . Dispatch ers . IO Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠFragment åŁº ç±» ï¼Į å°ģè£ħ äºĨ æ ĩĴ åĬłè½½ çļĦ å®ŀçİ° Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠView Pager Ġ+ ĠFragment Ġæ ĥ ħ åĨµ ä¸ĭ ï¼Į Fragment ĠçļĦ çĶŁåĳ½ åĳ¨æľŁ åĽł ĠView Pager ĠçļĦ ç¼ĵåŃĺ æľºåĪ¶ èĢĮ å¤± åİ» äºĨ åħ·ä½ĵ æĦı ä¹ī Ċ Ġ* Ġ è¯¥ æĬ½ è±¡ ç±» èĩªå®ļä¹ī æĸ°çļĦ åĽŀè°ĥ æĸ¹æ³ķ ï¼Į å½ĵ ĠFragment Ġåı¯ è§ģ çĬ¶æĢģ æĶ¹åıĺ æĹ¶ ä¼ļ è§¦åıĳ çļĦ åĽŀè°ĥ æĸ¹æ³ķ ï¼Į åĴĮ ĠFragment Ġ ç¬¬ ä¸Ģæ¬¡ åı¯ è§ģ æĹ¶ ä¼ļ åĽŀè°ĥ çļĦæĸ¹æ³ķ Ċ Ġ* Ċ Ġ* Ġ@ see Ġ. on Fragment Visible Change Ċ Ġ* Ġ@ see Ġ. on Fragment First Visible Ċ Ġ*/ Ċ abstract Ġclass ĠBase Fragment Ġ: ĠFragment (), ĠBack Handled Interface , ĠCor outine Scope Ġ{ ĊĠĠĠ Ġval Ġjob Ġ= ĠJob () ĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠDispatch ers . Main Ġ+ Ġjob ĊĊĠĠĠ Ġvar Ġun binder : ĠU nb inder ? Ġ= Ġnull ĊĊĠĠĠ Ġprotected Ġvar Ġis Fragment Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġvar Ġis Re use View Ġ= Ġfalse ĊĠĠĠ Ġvar Ġis First Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġvar Ġroot View : ĠView ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġattach Context : ĠContext ĊĠĠĠ Ġprotected Ġval Ġapp Preferences : ĠApp Preferences Utils ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠApp Preferences Utils ( attach Context ) ĊĊĠĠĠ Ġ@ Target Api ( 2 3 ) ĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġon Attach To Context ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( activity ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Attach To Context ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Call Super ĊĠĠĠ Ġprivate Ġfun Ġon Attach To Context ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġattach Context Ġ= Ġcontext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠHandle Back Util . handle Back Press ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// setUser Visible Hint () åľ¨ Fragment åĪĽå»º æĹ¶ ä¼ļ åħĪ è¢« è°ĥçĶ¨ ä¸Ģæ¬¡ ï¼Į ä¼łåħ¥ isVisible To User Ġ= Ġfalse ĊĠĠĠ Ġ// å¦Ĥæŀľ å½ĵåīį Fragment åı¯ è§ģ ï¼Į éĤ£ä¹Ī setUser Visible Hint () ä¼ļ åĨį æ¬¡ è¢« è°ĥçĶ¨ ä¸Ģæ¬¡ ï¼Į ä¼łåħ¥ isVisible To User Ġ= Ġtrue ĊĠĠĠ Ġ// å¦Ĥæŀľ Fragment ä»İ åı¯ è§ģ -> ä¸įåı¯ è§ģ ï¼Į éĤ£ä¹Ī setUser Visible Hint () ä¹Ł ä¼ļ è¢« è°ĥçĶ¨ ï¼Į ä¼łåħ¥ isVisible To User Ġ= Ġfalse ĊĠĠĠ Ġ// æĢ» ç»ĵ ï¼ļ setUser Visible Hint () éĻ¤äºĨ Fragment çļĦ åı¯ è§ģ çĬ¶æĢģ åıĳçĶŁ åıĺåĮĸ æĹ¶ ä¼ļ è¢« åĽŀè°ĥ å¤ĸ ï¼Į åľ¨ new æĹ¶ ä¹Ł ä¼ļ è¢« åĽŀè°ĥ ĊĠĠĠ Ġ// å¦Ĥæŀľ æĪĳä»¬ éľĢè¦ģ åľ¨ Fragment åı¯ è§ģ ä¸İ ä¸įåı¯ è§ģ æĹ¶ å¹² çĤ¹ äºĭ ï¼Į çĶ¨ è¿Ļä¸ª çļĦè¯Ŀ å°±ä¼ļ æľī å¤ļ ä½Ļ çļĦ åĽŀè°ĥ äºĨ ï¼Į éĤ£ä¹Ī å°± éľĢè¦ģ éĩįæĸ° å°ģè£ħ ä¸Ģä¸ª ĊĠĠĠ Ġoverride Ġfun ĠsetUser Visible Hint ( isVisible To User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setUser Visible Hint ( isVisible To User ) ĊĠĠĠĠĠĠĠ Ġ// setUser Visible Hint () æľī åı¯èĥ½ åľ¨ fragment çļĦ çĶŁåĳ½ åĳ¨æľŁ å¤ĸ è¢« è°ĥçĶ¨ ĊĠĠĠĠĠĠĠ Ġif Ġ( root View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is First Visible Ġ&& Ġis VisibleTo User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Fragment First Visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis First Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Fragment Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( isVisible To User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Fragment Visible Change ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Fragment Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Fragment Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Fragment Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Fragment Visible Change ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit Variable () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// å¦Ĥæŀľ setUser Visible Hint () åľ¨ root View åĪĽå»º åīį è°ĥçĶ¨ æĹ¶ ï¼Į éĤ£ä¹Ī ĊĠĠĠĠĠĠĠ Ġ// å°± çŃī åĪ° root View åĪĽå»º å®Į åĲİ æīį åĽŀè°ĥ on Fragment Visible Change ( true ) ĊĠĠĠĠĠĠĠ Ġ// ä¿Ŀè¯ģ on Fragment Visible Change () çļĦ åĽŀè°ĥ åıĳçĶŁ åľ¨ root View åĪĽå»º å®ĮæĪĲ ä¹ĭåĲİ ï¼Į ä»¥ ä¾¿ æĶ¯æĮģ ui æĵįä½ľ ĊĠĠĠĠĠĠĠ Ġif Ġ( root View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot View Ġ= Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Visible Hint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is First Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Fragment First Visible () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis First Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Fragment Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Fragment Visible Change ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Fragment Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on View Created (( if Ġ( is Re use View ) Ġroot View Ġelse Ġview ) !! , ĠsavedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġinit Variable () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Variable () Ġ{ ĊĠĠĠĠĠĠĠ Ġis First Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġis Fragment Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġroot View Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġis Re use View Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinf late Ġ= Ġinflater . inflate ( get Layout Id (), Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġun binder Ġ= ĠB utter Kn ife . bind ( this , Ġinf late ) ĊĠĠĠĠĠĠĠ Ġreturn Ġinf late ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġabstract Ġfun Ġget Layout Id (): ĠInt ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĺ¯åĲ¦ ä½¿çĶ¨ Ġview ĠçļĦ å¤į çĶ¨ ï¼Į é»ĺè®¤ å¼ĢåĲ¯ ĊĠĠĠĠ Ġ* Ġview ĠçļĦ å¤į çĶ¨ æĺ¯ æĮĩ ï¼Į ViewPager Ġåľ¨ éĶĢ æ¯ ģ åĴĮ éĩį å»º ĠFragment ĠæĹ¶ ä¼ļ ä¸į æĸŃ è°ĥçĶ¨ ĠonCreate View () Ġ-> Ġon Destroy View () ĊĠĠĠĠ Ġ* Ġ ä¹ĭéĹ´çļĦ çĶŁåĳ½ åĩ½æķ° ï¼Į è¿Ļæł· åı¯èĥ½ä¼ļ åĩºçİ° éĩįå¤į åĪĽå»º Ġview ĠçļĦ æĥħåĨµ ï¼Į å¯¼èĩ´ çķĮéĿ¢ ä¸Ĭ æĺ¾ç¤º å¤ļä¸ª çĽ¸åĲĮ çļĦ ĠFragment ĊĠĠĠĠ Ġ* Ġview ĠçļĦ å¤į çĶ¨ åħ¶å®ŀ å°±æĺ¯ æĮĩ ä¿ĿåŃĺ ç¬¬ ä¸Ģæ¬¡ åĪĽå»º çļĦ Ġview ï¼Į åĲİ éĿ¢ åĨį ĠonCreate View () ĠæĹ¶ çĽ´æİ¥ è¿ĶåĽŀ ç¬¬ ä¸Ģæ¬¡ åĪĽå»º çļĦ Ġview ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġis Re use Ġæĺ¯åĲ¦ ä½¿çĶ¨ Ġview ĠçļĦ å¤į çĶ¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġreuse View ( is Re use : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Re use View Ġ= Ġis Re use ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åİ» éĻ¤ ĠsetUser Visible Hint () Ġ å¤ļ ä½Ļ çļĦ åĽŀè°ĥ åľºæĻ¯ ï¼Į ä¿Ŀè¯ģ åıªæľī å½ĵ ĠFragment Ġåı¯ è§ģ çĬ¶æĢģ åıĳçĶŁ åıĺåĮĸ æĹ¶ æīį åĽŀè°ĥ ĊĠĠĠĠ Ġ* Ġ åĽŀè°ĥ æĹ¶ æľº åľ¨ view åĪĽå»º å®Į åĲİ ï¼Į æīĢä»¥ æĶ¯æĮģ ui æĵįä½ľ ï¼Į è§£åĨ³ åľ¨ setUser Visible Hint () éĩĮ è¿Ľè¡Į ui æĵįä½ľ æľī åı¯èĥ½ æĬ¥ null å¼Ĥå¸¸ çļĦéĹ®é¢ĺ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġåı¯ åľ¨ è¯¥ åĽŀè°ĥ æĸ¹æ³ķ éĩĮ è¿Ľè¡Į ä¸ĢäºĽ ui æĺ¾ç¤º ä¸İ éļĲèĹı ï¼Į æ¯Ķå¦Ĥ åĬłè½½ æ¡Ĩ çļĦ æĺ¾ç¤º åĴĮ éļĲèĹı ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġis Visible Ġtrue Ġ Ġä¸į åı¯ è§ģ Ġ-> Ġåı¯ è§ģ ĊĠĠĠĠ Ġ* Ġfalse Ġåı¯ è§ģ Ġ Ġ-> Ġä¸į åı¯ è§ģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġon Fragment Visible Change ( isVisible : ĠBoolean ) Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġåľ¨ ĠFragment Ġ é¦ĸ æ¬¡ åı¯ è§ģ æĹ¶ åĽŀè°ĥ ï¼Į åı¯ åľ¨ è¿ĻéĩĮ è¿Ľè¡Į åĬłè½½ æķ°æį® ï¼Į ä¿Ŀè¯ģ åıª åľ¨ ç¬¬ ä¸Ģæ¬¡ æīĵå¼Ģ ĠFragment ĠæĹ¶ æīį ä¼ļ åĬłè½½ æķ°æį® ï¼Į ĊĠĠĠĠ Ġ* Ġ è¿Ļæł· å°±åı¯ä»¥ éĺ² æŃ¢ æ¯ıæ¬¡ è¿Ľåħ¥ éĥ½ éĩįå¤į åĬłè½½ æķ°æį® ĊĠĠĠĠ Ġ* Ġ è¯¥ æĸ¹æ³ķ ä¼ļ åľ¨ Ġon Fragment Visible Change () Ġ ä¹ĭåīį è°ĥçĶ¨ ï¼Į æīĢä»¥ ç¬¬ ä¸Ģæ¬¡ æīĵå¼Ģ æĹ¶ ï¼Į åı¯ä»¥ çĶ¨ ä¸Ģä¸ª åħ¨å±Ģ åıĺéĩı è¡¨ç¤º æķ°æį® ä¸ĭè½½ çĬ¶æĢģ ï¼Į ĊĠĠĠĠ Ġ* Ġ çĦ¶åĲİ åľ¨ è¯¥ æĸ¹æ³ķ åĨħ å°Ĩ çĬ¶æĢģ è®¾ç½®ä¸º ä¸ĭè½½ çĬ¶æĢģ ï¼Į æİ¥ çĿĢ åİ» æī§è¡Į ä¸ĭè½½ çļĦ ä»»åĬ¡ ĊĠĠĠĠ Ġ* Ġ æľĢåĲİ åľ¨ Ġon Fragment Visible Change () Ġ éĩĮ æł¹æį® æķ°æį® ä¸ĭè½½ çĬ¶æĢģ æĿ¥ æİ§åĪ¶ ä¸ĭè½½ è¿Ľ åº¦ ui æİ§ä»¶ çļĦ æĺ¾ç¤º ä¸İ éļĲèĹı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġon Fragment First Visible () Ġ{} ĊĠĠĠ Ġopen Ġfun Ġon Account Switch () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠRefresh able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( this Ġas ĠRefresh able ). on Refresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġhas Own App bar (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlaunch IO ( ĊĠĠĠĠĠĠĠ Ġstart : ĠCor outine Start Ġ= ĠCor outine Start . DEFAULT , ĊĠĠĠĠĠĠĠ Ġblock : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠJob Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlaunch ( IO Ġ+ Ġjob , Ġstart , Ġblock ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠBase Fragment :: class . java . simple Name ĊĠĠĠ Ġ} Ċ }