package Ġedu . self . crypt ote ch nical test . currency list Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . set Fragment Result Ċ import Ġandroidx . recyclerview . widget . Default Item Animator Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġedu . self . crypt ote ch nical test . core . database . model . Currency Info Ċ import Ġedu . self . crypt ote ch nical test . core . event . observe Event Ċ import Ġedu . self . crypt ote ch nical test . databinding . Fragment Currency List Binding Ċ import Ġkotlinx . parcel ize . Parcel ize Ċ import Ġorg . k oin . android x . view model . ext . android . shared ViewModel Ċ import Ġorg . k oin . core . parameter . parameters Of Ċ import Ġjava . util .* Ċ Ċ class ĠCurrency List Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġ@ Parcel ize ĊĠĠĠ Ġdata Ġclass ĠRequest ( val Ġid : ĠString Ġ= ĠUUID . randomUUID (). toString ()) Ġ: ĠParcel able ĊĊĠĠĠ Ġ@ Parcel ize ĊĠĠĠ Ġdata Ġclass ĠResponse ( val Ġclicked Item : ĠCurrency Info ) Ġ: ĠParcel able ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARG _ REQUEST Ġ= Ġ" ARG _ REQUEST " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG _ RESPONSE Ġ= Ġ" ARG _ RESPONSE " ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( request : ĠRequest ): ĠCurrency List Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCurrency List Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= Ġbundle Of ( ARG _ REQUEST Ġto Ġrequest ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrequest : ĠRequest ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġarguments ?. get Parcelable ( ARG _ REQUEST ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Currency List Binding ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠCurrency List ViewModel Ġby Ġshared ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġparameters Of ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFragment Currency List Binding . inflate ( in flater , Ġcontainer , Ġfalse ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ}. root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġwith ( binding . v List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Animator Ġ= ĠDefault Item Animator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( Divider Item Decoration ( context , ĠDiv ider Item Decoration . VERTICAL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠCurrency ListAdapter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Adapter Delegate ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . listOf VM . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( binding . v List . adapter Ġas ? ĠCurrency ListAdapter ?) ?. submit List ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . action Of Commit . observe Event ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( request , Ġresponse ) Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Currency List Fragment Ġshould Ġprovide Ġa Ġhook Ġof Ġitem Ġclick Ġlistener Ġto Ġthe Ġparent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// here Ġwe Ġare Ġusing ĠFragment Result Api Ġto Ġdelegate Ġthe Ġdesired Ġresponse Ġto Ġthe Ġfragment Ġcaller ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// no Ġmore Ġset Target Fragment Ġor Ġset Item Callback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// these Ġsolution Ġcannot Ġsurv ive Ġin Ġall Ġlifecycle Ġcase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Fragment Result ( request . id , Ġbundle Of ( ARG _ RESPONSE Ġto Ġresponse )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠBundle . to Currency List Fragment Response (): ĠCurrency List Fragment . Response ? Ġ{ ĊĠĠĠ Ġreturn Ġget Parcelable ( Currency List Fragment . ARG _ RESPONSE ) Ċ }