package Ġcom . sb ell anger . merged adapter . ui . main Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . Merge Adapter Ċ import Ġcom . sb ell anger . merged adapter . R Ċ import Ġcom . sb ell anger . merged adapter . ui . adapter . Footer Adapter Ċ import Ġcom . sb ell anger . merged adapter . ui . adapter . Header Adapter Ċ import Ġcom . sb ell anger . merged adapter . ui . adapter . Main Adapter Ċ import Ġkotlinx . android . synt hetic . main . main _ fragment .* Ċ Ċ class ĠMain Fragment Ġ: ĊĠĠĠ ĠFragment (), ĊĠĠĠ ĠI Main Contract . View Cap abil ites Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠMain Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////// / ĊĠĠĠ Ġ// ĠDATA ĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////// / ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠMain ViewModel ĊĊĠĠĠ Ġprivate Ġval Ġheader Adapter Ġby Ġlazy Ġ{ ĠHeader Adapter () Ġ} ĊĠĠĠ Ġprivate Ġval Ġmain Data Adapter Ġby Ġlazy Ġ{ ĠMain Adapter () Ġ} ĊĠĠĠ Ġprivate Ġval Ġfooter Adapter Ġby Ġlazy Ġ{ ĠFooter Adapter () Ġ} ĊĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////// / ĊĠĠĠ Ġ// ĠL IF EC Y CLE ĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////// / ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . main _ fragment , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this ). get ( Main ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġinit RecyclerView () ĊĊĠĠĠĠĠĠĠ ĠviewModel . observe Is Loading (). observe ( view Lifecycle Owner , ĠObserver Ġ{ ĠisLoading Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loader ( isLoading ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . observe Header (). observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġheader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Adapter . setData ( header ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . observe Main Data (). observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Data Adapter . setData ( data ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . observe Footer (). observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġfooter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfooter Adapter . setData ( footer ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////// / ĊĠĠĠ Ġ// ĠCONTRACT ĠIMP LEMENT ATION ĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////// / ĊĊĠĠĠ Ġoverride Ġfun Ġinit RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġre cycler _ view . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠMerge Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Adapter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Data Adapter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfooter Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Loader ( should Show : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvisibility Ġ= Ġif Ġ( should Show ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġloader _ view . visibility Ġ= Ġvisibility ĊĠĠĠ Ġ} Ċ } Ċ