package Ġcom . aad i . kotlin Ret rofit Mv vm . view Ċ Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ProgressBar Ċ import Ġcom . aad i . kotlin Ret rofit Mv vm . R Ċ import Ġcom . aad i . kotlin Ret rofit Mv vm . databinding . Fragment Products Binding Ċ import Ġcom . aad i . kotlin Ret rofit Mv vm . model . News Response Ċ import Ġcom . aad i . kotlin Ret rofit Mv vm . view model . Product ViewModel Ċ import Ġorg . k oin . android . view model . ext . android . viewModel ĊĊ Ċ class ĠProduct Detail Fragment Ġ: ĠFragment ( R . layout . fragment _ products ) Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġquery : ĠString ĊĠĠĠ Ġprivate Ġval Ġproduct ListModel : ĠProduct ViewModel Ġby ĠviewModel () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Products Binding ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ STRING Ġ= Ġ" KEY _ STRING " ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( query : ĠString ): ĠProduct Detail Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Serializable ( KEY _ STRING , Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠProduct Detail Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . arguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġarguments ?. let Ġ{ Ġquery Ġ= Ġit . get Serializable ( KEY _ STRING ) Ġas ĠString Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ products , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Products Binding . bind ( view ) ĊĊĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . layout Manager Ġ= Ġandroidx . recyclerview . widget . Linear LayoutManager ( view . context , ĠRecyclerView . VERTICAL , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this :: query . isInitialized ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġproduct Detail Adapter : ĠProduct Detail Adapter ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct ListModel . get Products ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct ListModel . get Live Product List (). observe ( view Lifecycle Owner , ĠObserver ( function Ġ= Ġfun ( news Response : ĠNews Response ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews Response ?. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Detail Adapter ?. set News Response ( news Response ) Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Detail Adapter Ġ= ĠProduct Detail Adapter ( news Response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Detail Adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . adapter Ġ= Ġproduct Detail Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }