package Ġcom . slo man . rs . sk ock o . adapter Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . slo man . rs . sk ock o . databinding . Game Item Binding Ċ import Ġcom . slo man . rs . sk ock o . model . Guess Ċ Ċ /** ĠUsed Ġfor Ġcreating , Ġpop ulating , Ġmodifying Ġ[ RecyclerView ] Ġ*/ Ċ class ĠGame Adapter ( private Ġval ĠonClick Listener : ĠOn ClickListener Guess ) Ġ: ĊĠĠĠ ĠList Adapter < Guess , ĠGame Adapter . Game ViewHolder >( ĊĠĠĠĠĠĠĠ ĠDiff Callback ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġ/** The ĠGame ViewHolder Ġconstructor Ġtakes Ġthe Ġbinding Ġvariable Ġfrom Ġthe Ġassociated ĊĠĠĠĠ Ġ* Ġitem , Ġwhich Ġnicely Ġgives Ġit Ġaccess Ġto Ġthe Ġfull Ġ[ Guess ] Ġinformation .*/ ĊĠĠĠ Ġclass ĠGame ViewHolder ( private Ġvar Ġbinding : ĠGame Item Binding ): ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( guess : ĠGu ess ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . property Ġ= Ġguess ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġimportant , Ġbecause Ġit Ġforces Ġthe Ġdata Ġbinding Ġto Ġexecute Ġimmediately , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhich Ġallows Ġthe ĠRecyclerView Ġto Ġmake Ġthe Ġcorrect Ġview Ġsize Ġmeasurements ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAllows Ġthe ĠRecyclerView Ġto Ġdetermine Ġwhich Ġitems Ġhave Ġchanged Ġwhen Ġthe Ġ[ List ] Ġof Ġ[ Guess ] ĊĠĠĠĠ Ġ* Ġhas Ġbeen Ġupdated . ĠNot Ġreally Ġnecessary Ġin Ġour Ġcase , Ġbut Ġimp re sc ind ible Ġfor Ġscaling Ġup */ ĊĠĠĠ Ġcompanion Ġobject ĠDiff Callback Ġ: ĠDiff Util . Item Callback < Guess >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠGu ess , Ġnew Item : ĠGu ess ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . guess Id Ġ== Ġnew Item . guess Id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠGu ess , Ġnew Item : ĠGu ess ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . g ues ses Ġ== Ġnew Item . g ues ses ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Type : ĠInt ): ĠGame ViewHolder Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠGame ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGame Item Binding . inflate ( LayoutInflater . from ( parent . context )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠRe places Ġthe Ġcontents Ġof Ġa Ġview Ġ( inv oked Ġby Ġthe Ġlayout Ġmanager ) */ ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠGame ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġguess Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Listener . onClick ( guess ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder . bind ( guess ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Custom Ġlistener Ġthat Ġhandles Ġclicks Ġon Ġ[ RecyclerView ] Ġitems . Ġ ĠP asses Ġthe Ġ[ Guess ] ĊĠĠĠĠ Ġ* Ġassociated Ġwith Ġthe Ġcurrent Ġitem Ġto Ġthe Ġ[ onClick ] Ġfunction . ĊĠĠĠĠ Ġ* Ġ@ param Ġclick Listener Ġlambda Ġthat Ġwill Ġbe Ġcalled Ġwith Ġthe Ġcurrent Ġ[ Guess ] */ ĊĠĠĠ Ġclass ĠOn ClickListener Guess ( val Ġclick Listener : Ġ( guess : ĠGu ess ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonClick ( guess : ĠGu ess ) Ġ= Ġclick Listener ( guess ) ĊĠĠĠ Ġ} Ċ Ċ }