/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 , ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . example . android . track mys leep quality . sleep tracker Ċ Ċ 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 . example . android . track mys leep quality . database . Sleep Night Ċ import Ġcom . example . android . track mys leep quality . databinding . ListItem Sleep Night Binding Ċ Ċ /** Ċ Ġ* ĠThe Ġadapter Ġwe Ġuse Ġfor Ġthe Ġ[ RecyclerView ] Ġwith Ġresource ĠID ĠR . id . sleep _ list Ġin Ġthe Ġlayout Ġfile Ċ Ġ* Ġlayout / fragment _ sleep _ tracker . xml Ġwhich Ġdisplays Ġthe Ġ[ Sleep Night ] Ġrecords Ġread Ġfrom Ġour Ġdatabase . Ċ Ġ* ĠThis Ġclass Ġimplements Ġa Ġ[ ListAdapter ] Ġfor Ġ[ RecyclerView ] Ġ Ġwhich Ġuses ĠData ĠBinding Ġto Ġpresent Ċ Ġ* Ġ[ List ] Ġdata , Ġincluding Ġcomputing Ġdiffs Ġbetween Ġlists . ĠNote Ġthat Ġour Ġ[ ListAdapter ] Ġsuper Ġclass Ċ Ġ* Ġindirect ly Ġholds Ġour Ġdataset Ġand Ġwe Ġneed Ġto Ġretrieve Ġitems Ġusing Ġits Ġ` get ` Ġmethod Ġrather Ġthan Ċ Ġ* Ġdirectly Ġfrom Ġour Ġ[ Sleep Tracker ViewModel ] Ġdataset Ġfield Ġ` n ights `. ĠAn Ġobserver Ġof Ġ` n ights ` Ġcalls Ċ Ġ* Ġthe Ġ` submit List ` Ġmethod Ġof Ġ[ ListAdapter ] Ġwith Ġ` n ights ` Ġto Ġhave Ġit Ġdiff ed Ġand Ġdisplayed Ġwhenever Ċ Ġ* Ġthe Ġ` LiveData ` Ġlist Ġof Ġ[ Sleep Night ] Ġchanges . Ċ Ġ* Ċ Ġ* Ġ@ param Ġclick Listener Ġthe Ġ[ Sleep Night Listener ] Ġeach Ġitem Ġview Ġbinding Ġin Ġour Ġ[ RecyclerView ] Ġshould Ċ Ġ* Ġuse Ġas Ġits Ġ` click Listener ` Ġvariable . ĠThe Ġbinding Ġexpression Ġfor Ġthe Ġ" android : onClick " Ġattribute Ċ Ġ* Ġof Ġthe Ġ` Constraint Layout ` Ġholding Ġall Ġthe Ġviews Ġof Ġthe Ġlayout / list _ item _ sleep _ night . xml Ġlayout Ċ Ġ* Ġfile Ġcalls Ġthe Ġ` onClick ` Ġmethod Ġof Ġits Ġ` click Listener ` Ġvariable Ġwith Ġits Ġ` sleep ` Ġvariable Ġ( the Ċ Ġ* Ġ[ Sleep Night ] Ġit Ġdisplays ). Ċ Ġ*/ Ċ @ Suppress (" Member Visibility Can Be Private ") Ċ class ĠSleep Night Adapter ( ĊĠĠĠĠĠĠĠ Ġval Ġclick Listener : ĠSleep Night Listener Ċ ) Ġ: ĠList Adapter < Sleep Night , ĠSleep Night Adapter . ViewHolder >( Sleep Night Diff Callback ()) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġby ĠRecyclerView Ġto Ġdisplay Ġthe Ġdata Ġat Ġthe Ġspecified Ġposition . ĠThis Ġmethod Ġshould ĊĠĠĠĠ Ġ* Ġupdate Ġthe Ġcontents Ġof Ġthe Ġ[ ViewHolder ] Ġ` item View ` Ġto Ġreflect Ġthe Ġitem Ġat Ġthe Ġgiven Ġposition . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWe Ġcall Ġthe Ġ` bind ` Ġmethod Ġof Ġour Ġ[ ViewHolder ] Ġparameter Ġ[ holder ] Ġto Ġhave Ġit Ġbind Ġthe ĊĠĠĠĠ Ġ* Ġ[ ViewHolder ] Ġto Ġthe Ġ Ġ[ Sleep Night ] Ġreturned Ġ Ġby Ġthe Ġ[ ListAdapter . getItem ] Ġmethod Ġfor Ġour ĊĠĠĠĠ Ġ* Ġ[ Int ] Ġparameter Ġ[ position ], Ġas Ġwell Ġas Ġour Ġ[ Sleep Night Listener ] Ġfield Ġ[ click Listener ]. ĊĠĠĠĠ Ġ* ĠIt Ġwill Ġset Ġthe Ġ` sleep ` Ġvariable Ġof Ġits Ġ[ ListItem Sleep Night Binding ] Ġto Ġits Ġ[ Sleep Night ] ĊĠĠĠĠ Ġ* Ġparameter Ġand Ġthe Ġ` click Listener ` Ġvariable Ġto Ġits Ġ[ Sleep Night Listener ] Ġparameter Ġthen Ġcall ĊĠĠĠĠ Ġ* Ġthe Ġ` execute Pending Bindings ` Ġof Ġthat Ġbinding Ġto Ġhave Ġit Ġupdate Ġthe Ġview Ġheld Ġby Ġthe ĊĠĠĠĠ Ġ* Ġ[ ViewHolder ] Ġto Ġreflect Ġthe Ġchanges Ġto Ġits Ġvariables . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġholder ĠThe Ġ[ ViewHolder ] Ġwhich Ġshould Ġbe Ġupdated Ġto Ġrepresent Ġthe Ġcontents Ġof Ġthe ĊĠĠĠĠ Ġ* Ġitem Ġat Ġthe Ġgiven Ġposition Ġin Ġthe Ġdata Ġset . ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠThe Ġposition Ġof Ġthe Ġitem Ġwithin Ġthe Ġadapter 's Ġdata Ġset . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( getItem ( position ) !! , Ġclick Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġ[ RecyclerView ] Ġneeds Ġa Ġnew Ġ[ ViewHolder ] Ġof Ġthe Ġgiven Ġtype Ġto Ġrepresent Ġan Ġitem . ĊĠĠĠĠ Ġ* ĠWe Ġjust Ġreturn Ġthe Ġ[ ViewHolder ] Ġreturned Ġby Ġthe Ġ[ ViewHolder . from ] Ġfactory Ġmethod Ġfor Ġour ĊĠĠĠĠ Ġ* Ġ[ ViewGroup ] Ġparameter Ġ[ parent ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġparent ĠThe Ġ[ ViewGroup ] Ġinto Ġwhich Ġthe Ġnew ĠView Ġwill Ġbe Ġadded Ġafter Ġit Ġis Ġbound Ġto ĊĠĠĠĠ Ġ* Ġan Ġadapter Ġposition . ĊĠĠĠĠ Ġ* Ġ@ param Ġview Type ĠThe Ġview Ġtype Ġof Ġthe Ġnew ĠView . ĊĠĠĠĠ Ġ* Ġ@ return ĠA Ġnew Ġ[ ViewHolder ] Ġthat Ġholds Ġa ĠView Ġof Ġthe Ġgiven Ġview Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠViewGroup , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Type : ĠInt ĊĠĠĠ Ġ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder . from ( parent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠViewHolder Ġconstructor Ġtakes Ġthe Ġbinding Ġvariable Ġfrom Ġthe Ġassociated Ġlayout Ġfile ĊĠĠĠĠ Ġ* Ġlayout / list _ item _ sleep _ night . xml , Ġwhich Ġnicely Ġgives Ġit Ġaccess Ġto Ġthe Ġfull Ġ[ Sleep Night ] ĊĠĠĠĠ Ġ* Ġinformation Ġdisplay Ġjust Ġby Ġsetting Ġits Ġ` sleep ` Ġvariable . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbinding Ġthe Ġ[ ListItem Sleep Night Binding ] Ġfor Ġthe Ġview Ġwe Ġare Ġto Ġdisplay Ġour Ġitem Ġin ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠViewHolder Ġprivate Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding : ĠListItem Sleep Night Binding ĊĠĠĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) ĊĠĠĠ Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠBind s Ġthis Ġ[ ViewHolder ] Ġinstance Ġto Ġits Ġ[ Sleep Night ] Ġparameter Ġ[ item ] Ġby Ġsetting Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġ` sleep ` Ġvariable Ġof Ġour Ġ[ ListItem Sleep Night Binding ] Ġfield Ġ[ binding ] Ġto Ġ[ item ] Ġand Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġ` click Listener ` Ġvariable Ġto Ġ[ click Listener ] Ġthen Ġcalling Ġthe Ġ` execute Pending Bindings ` ĊĠĠĠĠĠĠĠĠ Ġ* Ġmethod Ġof Ġ[ binding ] Ġto Ġhave Ġit Ġevaluate Ġthe Ġpending Ġbinding , Ġupdating Ġany ĠViews Ġthat ĊĠĠĠĠĠĠĠĠ Ġ* Ġhave Ġexpressions Ġbound Ġto Ġthe Ġmodified Ġvariables . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġitem Ġthe Ġ[ Sleep Night ] Ġwhose Ġinformation Ġthat Ġwe Ġare Ġto Ġdisplay . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġclick Listener Ġthe Ġ[ Sleep Night Listener ] Ġwhose Ġ` onClick ` Ġmethod Ġshould Ġbe Ġcalled ĊĠĠĠĠĠĠĠĠ Ġ* Ġwith Ġour Ġ[ Sleep Night ] Ġvariable Ġ` sleep ` Ġwhen Ġour Ġitem Ġview Ġis Ġclicked . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( item : ĠSleep Night , Ġclick Listener : ĠSleep Night Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . sleep Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . click Listener Ġ= Ġclick Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠFactory Ġmethod Ġto Ġcreate Ġa Ġnew Ġinstance Ġof Ġ[ ViewHolder ]. ĠWe Ġinitialize Ġour Ġvariable ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ` val Ġlayout Inflater ` Ġwith Ġthe Ġ[ LayoutInflater ] Ġfor Ġthe Ġcontext Ġof Ġour Ġ[ ViewGroup ] ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġparameter Ġ[ parent ]. ĠThen Ġwe Ġinitialize Ġour Ġ[ ListItem Sleep Night Binding ] Ġvariable ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ` val Ġbinding ` Ġby Ġhaving Ġthe Ġ[ ListItem Sleep Night Binding . inflate ] Ġuse Ġ` layout Inflater ` ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġto Ġinf late Ġits Ġassociated Ġlayout Ġfile Ġlayout / list _ item _ sleep _ night . xml Ġwith Ġ[ parent ] ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġsupply ing Ġthe Ġlayout Ġparams . ĠFinally Ġwe Ġreturn Ġa Ġnew Ġinstance Ġof Ġ[ ViewHolder ] Ġwhich ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġis Ġconstructed Ġto Ġuse Ġ` binding ` Ġas Ġits Ġ[ ListItem Sleep Night Binding ]. ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġparent ĠThe Ġ[ ViewGroup ] Ġinto Ġwhich Ġthe Ġnew ĠView Ġwill Ġbe Ġadded Ġafter Ġit Ġis Ġbound ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġto Ġan Ġadapter Ġposition . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfrom ( parent : ĠViewGroup ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠListItem Sleep Night Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Inflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( binding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCallback Ġfor Ġcalculating Ġthe Ġdiff Ġbetween Ġtwo Ġnon - null Ġ[ Sleep Night ] Ġobjects Ġin Ġour Ġlist . Ċ Ġ* ĠIt Ġis Ġused Ġto Ġcalculate Ġupdates Ġfor Ġour ĠRecyclerView Ġ[ Sleep Night Adapter ] Ċ Ġ*/ Ċ class ĠSleep Night Diff Callback Ġ: ĠDiff Util . Item Callback < Sleep Night >() Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġto Ġcheck Ġwhether Ġtwo Ġobjects Ġrepresent Ġthe Ġsame Ġitem . ĠFor Ġexample , Ġif Ġyour Ġitems Ġhave ĊĠĠĠĠ Ġ* Ġunique Ġids , Ġthis Ġmethod Ġshould Ġcheck Ġtheir Ġid Ġequality . ĠWe Ġjust Ġreturn Ġthe Ġresult Ġof Ġcomparing ĊĠĠĠĠ Ġ* Ġthe Ġprimary Ġkey Ġ` night Id ` Ġproperty Ġof Ġthe Ġtwo Ġ[ Sleep Night ] Ġparameters Ġfor Ġequality . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġold Item ĠThe Ġ[ Sleep Night ] Ġin Ġthe Ġold Ġlist . ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Item ĠThe Ġ[ Sleep Night ] Ġin Ġthe Ġnew Ġlist . ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġtwo Ġitems Ġrepresent Ġthe Ġsame Ġobject Ġor Ġ` false ` Ġif Ġthey Ġare Ġdifferent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠSleep Night , Ġnew Item : ĠSleep Night ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item . night Id Ġ== Ġnew Item . night Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġto Ġcheck Ġwhether Ġtwo Ġitems Ġhave Ġthe Ġsame Ġdata . ĠThis Ġinformation Ġis Ġused Ġto Ġdetect Ġif ĊĠĠĠĠ Ġ* Ġthe Ġcontents Ġof Ġan Ġitem Ġhave Ġchanged . ĠWe Ġjust Ġreturn Ġthe Ġresult Ġof Ġcomparing Ġour Ġtwo Ġ[ Sleep Night ] ĊĠĠĠĠ Ġ* Ġparameters Ġfor Ġequality . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġold Item ĠThe Ġitem Ġin Ġthe Ġold Ġlist . ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Item ĠThe Ġitem Ġin Ġthe Ġnew Ġlist . ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġcontents Ġof Ġthe Ġitems Ġare Ġthe Ġsame Ġor Ġ` false ` Ġif Ġthey Ġare Ġdifferent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠSleep Night , Ġnew Item : ĠSleep Night ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġis Ġintended Ġto Ġbe Ġconstructed Ġwith Ġa Ġlambda Ġwhich Ġwill Ġbe Ġcalled Ġwith Ġthe Ġ` night Id ` Ċ Ġ* Ġprimary Ġkey Ġof Ġthe Ġ[ Sleep Night ] Ġargument Ġof Ġits Ġ[ Sleep Night Listener . onClick ] Ġmethod Ġwhen Ġthe Ċ Ġ* Ġmethod Ġis Ġcalled . Ġ[ Sleep Night Listener . onClick ] Ġis Ġcalled Ġby Ġa Ġbinding Ġexpression Ġfor Ġthe Ċ Ġ* Ġ" android : onClick " Ġattribute Ġof Ġthe Ġ` Constraint Layout ` Ġholding Ġall Ġthe Ġviews Ġof Ġthe Ċ Ġ* Ġlayout / list _ item _ sleep _ night . xml Ġlayout Ġfile Ġwith Ġits Ġ[ Sleep Night ] Ġvariable Ġ` sleep `. Ċ Ġ* Ċ Ġ* Ġ@ param Ġclick Listener Ġa Ġfunction Ġtype Ġwhich Ġaccepts Ġthe Ġ` night Id ` Ġprimary Ġkey Ġof Ġa Ġ[ Sleep Night ] Ċ Ġ* Ġand Ġreturns Ġ` Unit `. ĠThe Ġ` onCreate View ` Ġoverride Ġof Ġ` Sleep Tracker Fragment ` Ġuses Ġa Ġlambda Ġwhen Ġit Ċ Ġ* Ġconstructs Ġits Ġ[ Sleep Night Adapter ] Ġwhich Ġcalls Ġthe Ġ` on Sleep Night Clicked ` Ġmethod Ġof Ġits Ċ Ġ* Ġ` Sleep Tracker ViewModel ` Ġfield Ġ` sleep Tracker ViewModel ` Ġwith Ġthe Ġ` night Id `. Ġ` on Sleep Night Clicked ` Ċ Ġ* Ġsets Ġthe Ġvalue Ġof Ġits Ġ`_ navigate To Sleep Detail ` Ġfield Ġto Ġ` night Id ` Ġwhich Ġwill Ġtrigger Ġnavigation Ċ Ġ* Ġto Ġthe Ġ` Sleep Detail Fragment ` Ġto Ġdisplay Ġthe Ġ[ Sleep Night ] Ġdetails . Ċ Ġ*/ Ċ class ĠSleep Night Listener ( val Ġclick Listener : Ġ( sleep Id : ĠLong ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġby Ġa Ġbinding Ġexpression Ġfor Ġthe Ġ" android : onClick " Ġattribute Ġof Ġthe Ġ` Constraint Layout ` ĊĠĠĠĠ Ġ* Ġholding Ġall Ġthe Ġviews Ġof Ġthe Ġlayout / list _ item _ sleep _ night . xml Ġlayout Ġfile Ġwith Ġits Ġ[ Sleep Night ] ĊĠĠĠĠ Ġ* Ġvariable Ġ` sleep `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnight Ġthe Ġ[ Sleep Night ] Ġwhose Ġ` night Id ` Ġprimary Ġkey Ġwe Ġare Ġto Ġpass Ġas Ġan Ġargument Ġto Ġour ĊĠĠĠĠ Ġ* Ġ[ click Listener ] Ġfunction Ġtype Ġfield Ġ( a Ġlambda Ġin Ġour Ġcase ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠonClick ( night : ĠSleep Night ) Ġ= Ġclick Listener ( night . night Id ) Ċ } Ċ