package Ġdev . d re wh amil ton . rx preferences . example . edit Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . lifecycle . get Ċ import Ġdev . d re wh amil ton . rx preferences . example . Example Application Ċ import Ġdev . d re wh amil ton . rx preferences . example . R Ċ import Ġdev . d re wh amil ton . rx preferences . example . base . ui . Generic ViewModel Factory Ċ import Ġdev . d re wh amil ton . rx preferences . example . base . ui . Rx Fragment Ċ import Ġio . reactivex . rx java 3 . android . schedul ers . Android Schedulers Ċ import Ġkotlinx . android . synt hetic . main . edit . integer Value Ċ import Ġkotlinx . android . synt hetic . main . edit . put Button Ċ import Ġkotlinx . android . synt hetic . main . edit . remove Button Ċ import Ġkotlinx . android . synt hetic . main . edit . stringValue Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠEdit ing Fragment Ġ: ĠRx Fragment () Ġ{ ĊĊĠĠĠ Ġ@ Suppress (" Protected In Final ") ĊĠĠĠ Ġ@ Inject Ġprotected Ġlateinit Ġvar ĠviewModel Factory : ĠGeneric ViewModel Factory < Editing ViewModel > ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġediting ViewModel : ĠEdit ing ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠExample Application . application Component . inject ( this ) ĊĠĠĠĠĠĠĠ Ġediting ViewModel Ġ= ĠViewModel Providers . of ( this , ĠviewModel Factory ). get () ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?) Ġ= ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . layout . edit , Ġcontainer ) !! ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġinteger Value . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Button . isEnabled Ġ= Ġs ?. isNotEmpty () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġediting ViewModel . get Example String Once () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġstring Ġ-> Ġstring Value . setText ( string ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. track Until Destroy View () ĊĠĠĠĠĠĠĠ Ġediting ViewModel . get Example Integer Once () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġinteger Ġ-> Ġinteger Value . setText ( integer . toString ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. track Until Destroy View () ĊĊĠĠĠĠĠĠĠ Ġput Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġediting ViewModel . set Example Values ( stringValue . text . toString (), Ġinteger Value . text . toString (). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. track Until Destroy View () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġremove Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġediting ViewModel . remove Example Values () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Value . text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteger Value . text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. track Until Destroy View () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ