package Ġcom . g alk o . best flix . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . recyclerview . widget . Default Item Animator Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġcom . g alk o . best flix . R Ċ import Ġcom . g alk o . best flix . model . Movie SearchResult Ċ import Ġcom . g alk o . best flix . network . Movies Adapter Ċ import Ġcom . g alk o . best flix . network . On ItemClickListener Ċ import Ġkotlinx . android . synt hetic . main . fragment _ movies _ list .* ĊĊ Ċ class ĠMov ies List Fragment Ġ: ĠFragment (), ĠOn ItemClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmovies Adapter Ġ= ĠMov ies Adapter ( item ClickListener Ġ= Ġthis ) ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMov ies ViewModel Ġby Ġactivity ViewModels () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ movies _ list , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit RecyclerView () ĊĊĠĠĠĠĠĠĠ ĠviewModel . observe Movies ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Adapter . update Items ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( movies _ list ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrid LayoutManager Ġ= ĠGrid LayoutManager ( context , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid LayoutManager . span Size Lookup Ġ= Ġ( object Ġ: ĠGrid LayoutManager . Span Size Lookup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Span Size ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ% Ġ 7 Ġ== Ġ 0 Ġ|| Ġ(( position Ġ+ Ġ 1 ) Ġ% Ġ 7 Ġ== Ġ 0 ) Ġ Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. item Count Ġ!= Ġnull Ġ&& Ġposition Ġ+ Ġ 1 Ġ== Ġadapter ?. item Count Ġ-> Ġ( adapter ?. item Count )?. let { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ- Ġ(( position Ġ- Ġ 1 ) Ġ% Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġst agger ed Grid LayoutManager Ġ= ĠSt agger ed Grid LayoutManager ( 3 , ĠSt agger ed Grid LayoutManager . VERTICAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// st agger ed Grid LayoutManager . gap Strategy Ġ= ĠG AP _ HAND LING _ MOVE _ ITEMS _ B ETWEEN _ SPAN S ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġgrid LayoutManager ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Animator Ġ= ĠDefault Item Animator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( Divider Item Decoration ( context , ĠDiv ider Item Decoration . VERTICAL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( Divider Item Decoration ( context , ĠDiv ider Item Decoration . HORIZONTAL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġmovies Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( movie : ĠMovie SearchResult ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . select Movie ( movie ) ĊĠĠĠĠĠĠĠ Ġ// find Nav Controller (). navigate ( R . id . action _ Movies List Fragment _ to _ Movie Details Fragment ) Ċ // ĠĠĠĠĠĠĠ ĠSn ackbar . make ( this . require View (), Ġ" Clicked Ġ" Ġ+ Ġmovie . title , ĠSn ackbar . LENGTH _ LONG ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" Action ", Ġnull ). show () ĊĠĠĠ Ġ} Ċ }