package Ġdev . k lem en . android . playground . ui . base Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . databinding . library . base Adapters . BR Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . create ViewModel Lazy Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠBase Ġclass Ġfor Ġevery ĠFragment Ġthat Ġrequires ĠData Binding . Ċ Ġ* ĠRed uc es ĠViewModel Ġand ĠData Binding Ġinstantiation Ġbo iler - plate Ġin Ġactual ĠF rag ments . Ċ Ġ* Ċ Ġ* Ġ@ param ĠviewModel K Class ĠViewModel Ġclass , Ġrequired Ġfor Ġl az ily Ġcreating Ġthe ĠViewModel . Ċ Ġ* Ġ@ param Ġlayout Id ĠFragment 's ĠLayout Res Ġid Ġto Ġinf late Ġthe Ġlayout Ġand Ġcreate Ġthe ĠData Binding . Ċ Ġ*/ Ċ abstract Ġclass ĠBase Fragment < VM Ġ: ĠViewModel >( ĊĠĠĠ ĠviewModel K Class : ĠK Class < VM >, ĊĠĠĠ Ġ@ Layout Res Ġprivate Ġval Ġlayout Id : ĠInt Ċ ) Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprotected Ġval ĠviewModel Ġby Ġcreate ViewModel Lazy ( viewModel K Class , Ġ{ ĠviewModel Store Ġ}) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . ĠCreate Ġthe Ġbinding , Ġusing Ġthe ĠData Binding Util . ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 . ĠAttach Ġthe ĠFragment Ġas Ġthe Ġlifecycle Owner . ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 . ĠSet Ġgeneric ĠviewModel Ġvariable , Ġwhich Ġevery ĠBase Fragment Ġdata Binding Ġlayout Ġwill Ġinclude . ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġreturn ĠData Binding Util . inflate < ViewData Binding >( in flater , Ġlayout Id , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġthis @ Base Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Variable ( BR . viewModel , ĠviewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. root ĊĠĠĠ Ġ} Ċ } Ċ