package Ġcom . example . o app . base Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . example . w app . demo . ext . dismiss Loading Ext Ċ import Ġcom . example . w app . demo . ext . get Vm Clazz Ċ import Ġcom . example . w app . demo . ext . show Loading Ext Ċ import Ġcom . hy ph enate . chat . EM Client Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġjs xia osh ui Ġon Ġ 2 0 2 1 / 7 / 2 2 Ċ Ġ*/ Ċ abstract Ġclass ĠBase Vm Fragment < VM : Base ViewModel >: Fragment () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġis First : ĠBoolean = true ; ĊĠĠĠ Ġlateinit Ġvar Ġm ViewModel : VM ĊĠĠĠ Ġlateinit Ġvar Ġm Activity : ĠAppCompatActivity ĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġm Activity = context Ġas ĠAppCompatActivity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ Ġinflater . inflate ( layout Id (), container , false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġm ViewModel = create ViewModel () ĊĠĠĠĠĠĠĠ Ġregister Ui Change () ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġcreate Observer () ĊĠĠĠĠĠĠĠ Ġinit Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠĠ Ġif ( lifecycle . currentState == Lifecycle . State . STARTED && is First ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlazy Load () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis First = false ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, 3 0 0 ) ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġabstract Ġ Ġfun Ġlayout Id (): Int ĊĠĠĠ Ġabstract Ġfun Ġinit View () ĊĠĠĠ Ġabstract Ġfun Ġinit Data () ĊĠĠĠ Ġabstract Ġfun Ġcreate Observer () ĊĠĠĠ Ġabstract Ġ Ġfun Ġlazy Load () ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĽå»º viewModel ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġcreate ViewModel (): ĠVM Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠViewModel Provider ( this ). get ( get Vm Clazz ( this )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** * ĊĠĠĠĠ Ġ* Ġ æ³¨åĨĮ UI Ġ äºĭä»¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġregister Ui Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// æĺ¾ç¤º å¼¹ çªĹ ĊĠĠĠĠĠĠĠ Ġm ViewModel . loading Dialog . show Loading . observe In Fragment ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Ext ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ// åħ³éĹŃ å¼¹ çªĹ ĊĠĠĠĠĠĠĠ Ġm ViewModel . loading Dialog . dismiss Dialog . observe In Fragment ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Loading Ext () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå°Ĩ éĿŀ è¯¥ Fragment ç»ĳ å®ļçļĦ ViewModel æ·»åĬł Ġloading åĽŀè°ĥ Ġ éĺ² æŃ¢ åĩºçİ° è¯·æ±Ĥ æĹ¶ ä¸į æĺ¾ç¤º Ġloading Ġ å¼¹ çªĹ bug ĊĠĠĠĠ Ġ* Ġ@ param Ġview Models ĠArray < out ĠBase ViewModel > ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġadd Loading Ob serve ( var arg Ġview Models : ĠBase ViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview Models . forEach Ġ{ ĠviewModel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĺ¾ç¤º å¼¹ çªĹ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . loading Dialog . show Loading . observe In Fragment ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// show Loading ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åħ³éĹŃ å¼¹ çªĹ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . loading Dialog . dismiss Dialog . observe In Fragment ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// dismiss Loading () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġis LoggedIn (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEM Client . getInstance (). is LoggedIn Before ĊĠĠĠ Ġ} ĊĊĊĊĊ Ċ }