package Ġcom . android . mv vm . new Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ Ċ /** Ċ Ġ* Ġdate : Ġ 2 0 2 1 / 5 / 1 Ċ Ġ* Ġdesc : Ċ Ġ*/ Ċ abstract Ġclass ĠBase B VM Fragment < B Ġ: ĠView Data Binding , ĠVM Ġ: ĠBase ViewModel > Ġ: ĠBase Binding Fragment < B >(), ĊĠĠĠ ĠView Behavior Ġ{ ĊĊĠĠĠ Ġprotected Ġlateinit Ġvar ĠviewModel : ĠVM ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( root View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġroot View ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinject Data Binding ( in flater , Ġcontainer ) ĊĠĠĠĠĠĠĠ Ġinject ViewModel () ĊĠĠĠĠĠĠĠ Ġinitialize ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit Internal Observer () ĊĠĠĠĠĠĠĠ Ġreturn Ġroot View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġinject ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvm Ġ= Ġcreate ViewModel () ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this , ĠBase ViewModel . create ViewModel Factory ( vm )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( vm :: class . java ) ĊĠĠĠĠĠĠĠ ĠviewModel . application Ġ= Ġactivity !!. application ĊĠĠĠĠĠĠĠ Ġlifecycle . add Observer ( viewModel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġlifecycle . remove Observer ( viewModel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġinit Internal Observer () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel ._ loading Event . observe NonNull ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading UI ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel ._ empty Page Event . observe NonNull ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Empty UI ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel ._ toast Event . observe NonNull ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel ._ page Navigation Event . observe NonNull ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel ._ back Press Event . observe NonNull ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback Press ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel ._ finish Page Event . observe NonNull ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Page ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġcreate ViewModel (): ĠVM ; Ċ Ċ }