package Ġcom . example . android . track mys leep quality . sleep tracker Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . NonNull Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . example . android . track mys leep quality . R Ċ import Ġcom . example . android . track mys leep quality . convert Duration To Formatted Ċ import Ġcom . example . android . track mys leep quality . convert Numeric Quality ToString Ċ import Ġcom . example . android . track mys leep quality . database . Sleep Night Ċ import Ġcom . example . android . track mys leep quality . databinding . ListItem Sleep Night Binding ĊĊ Ċ class ĠSleep Night Adapter : ĠList Adapter < Sleep Night , ĠSleep Night Adapter . ViewHolder >( Sleep Night Diff Callback ()) Ġ{ ĊĊĊĊĠĠĠ Ġclass ĠViewHolder Ġprivate Ġconstructor ( val Ġbinding : Ġ ĠListItem Sleep Night Binding ): ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsleep Length : ĠTextView Ġ= Ġbinding . sleep Length ĊĠĠĠĠĠĠĠ Ġval Ġquality : ĠTextView Ġ= Ġbinding . quality String ĊĠĠĠĠĠĠĠ Ġval Ġquality Image : ĠImageView Ġ= Ġbinding . quality Image ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( Ġitem : ĠSleep Night ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠitemView . context . resources ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . sleep Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen ĠRecyclerView Ġneeds Ġa Ġnew Ġ[ ViewHolder ] Ġof Ġthe Ġgiven Ġtype Ġto Ġrepresent ĊĠĠĠĠ Ġ* Ġan Ġitem . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġnew ĠViewHolder Ġshould Ġbe Ġconstructed Ġwith Ġa Ġnew ĠView Ġthat Ġcan Ġrepresent Ġthe Ġitems ĊĠĠĠĠ Ġ* Ġof Ġthe Ġgiven Ġtype . ĠYou Ġcan Ġeither Ġcreate Ġa Ġnew ĠView Ġmanually Ġor Ġinf late Ġit Ġfrom Ġan ĠXML ĊĠĠĠĠ Ġ* Ġlayout Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġnew ĠViewHolder Ġwill Ġbe Ġused Ġto Ġdisplay Ġitems Ġof Ġthe Ġadapter Ġusing ĊĠĠĠĠ Ġ* Ġ[. on Bind ViewHolder ]. ĠSince Ġit Ġwill Ġbe Ġre - used Ġto Ġdisplay ĊĠĠĠĠ Ġ* Ġdifferent Ġitems Ġin Ġthe Ġdata Ġset , Ġit Ġis Ġa Ġgood Ġidea Ġto Ġcache Ġreferences Ġto Ġsub Ġviews Ġof ĊĠĠĠĠ Ġ* Ġthe ĠView Ġto Ġavoid Ġunnecessary Ġ[ View . findViewById ] Ġcalls . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ 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 Ġ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġof Ġthe Ġnew ĠView . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠA Ġnew ĠViewHolder Ġthat Ġholds Ġa ĠView Ġof Ġthe Ġgiven Ġview Ġtype . ĊĠĠĠĠ Ġ* Ġ@ see Ġ. getItem ViewType ĊĠĠĠĠ Ġ* Ġ@ see Ġ. on Bind ViewHolder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder . from ( parent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ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 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġun like Ġ[ android . widget . ListView ], ĠRecyclerView Ġwill Ġnot Ġcall Ġthis Ġmethod ĊĠĠĠĠ Ġ* Ġagain Ġif Ġthe Ġposition Ġof Ġthe Ġitem Ġchanges Ġin Ġthe Ġdata Ġset Ġunless Ġthe Ġitem Ġitself Ġis ĊĠĠĠĠ Ġ* Ġinvalid ated Ġor Ġthe Ġnew Ġposition Ġcannot Ġbe Ġdetermined . ĠFor Ġthis Ġreason , Ġyou Ġshould Ġonly ĊĠĠĠĠ Ġ* Ġuse Ġthe Ġ` position ` Ġparameter Ġwhile Ġac qu iring Ġthe Ġrelated Ġdata Ġitem Ġinside ĊĠĠĠĠ Ġ* Ġthis Ġmethod Ġand Ġshould Ġnot Ġkeep Ġa Ġcopy Ġof Ġit . ĠIf Ġyou Ġneed Ġthe Ġposition Ġof Ġan Ġitem Ġlater ĊĠĠĠĠ Ġ* Ġon Ġ( e . g . Ġin Ġa Ġclick Ġlistener ), Ġuse Ġ[ ViewHolder . get Adapter Position ] Ġwhich Ġwill ĊĠĠĠĠ Ġ* Ġhave Ġthe Ġupdated Ġadapter Ġposition . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠOverride Ġ[. on Bind ViewHolder ] Ġinstead Ġif ĠAdapter Ġcan ĊĠĠĠĠ Ġ* Ġhandle Ġefficient Ġpartial Ġbind . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ 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 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġitem Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠ Ġholder . bind ( item ) ĊĊĊĠĠĠ Ġ} ĊĊĊĊ Ċ } Ċ Ċ 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 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote : Ġ` null ` Ġitems Ġin Ġthe Ġlist Ġare Ġassumed Ġto Ġbe Ġthe Ġsame Ġas Ġanother Ġ` null ` ĊĠĠĠĠ Ġ* Ġitem Ġand Ġare Ġassumed Ġto Ġnot Ġbe Ġthe Ġsame Ġas Ġa Ġnon - ` null ` Ġitem . ĠThis Ġcallback Ġwill ĊĠĠĠĠ Ġ* Ġnot Ġbe Ġinvoked Ġfor Ġeither Ġof Ġthose Ġcases . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġold Item ĠThe Ġitem Ġin Ġthe Ġold Ġlist . ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Item ĠThe Ġitem Ġin Ġthe Ġnew Ġlist . ĊĠĠĠĠ Ġ* Ġ@ return ĠTrue Ġif Ġthe Ġtwo Ġitems Ġrepresent Ġthe Ġsame Ġobject Ġor Ġfalse Ġif Ġthey Ġare Ġdifferent . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠCallback . are Items The Same ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ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 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġto Ġcheck Ġequality Ġinstead Ġof Ġ[ Object . equals ] Ġso Ġthat Ġyou Ġcan ĊĠĠĠĠ Ġ* Ġchange Ġits Ġbehavior Ġdepending Ġon Ġyour ĠUI . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġexample , Ġif Ġyou Ġare Ġusing ĠDiff Util Ġwith Ġa ĊĠĠĠĠ Ġ* Ġ[ RecyclerView . Adapter ], Ġyou Ġshould ĊĠĠĠĠ Ġ* Ġreturn Ġwhether Ġthe Ġitems ' Ġvisual Ġrepresentations Ġare Ġthe Ġsame . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġcalled Ġonly Ġif Ġ[. are Items The Same ] Ġreturns Ġ` true ` Ġfor ĊĠĠĠĠ Ġ* Ġthese Ġitems . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote : ĠTwo Ġ` null ` Ġitems Ġare Ġassumed Ġto Ġrepresent Ġthe Ġsame Ġcontents . ĠThis Ġcallback ĊĠĠĠĠ Ġ* Ġwill Ġnot Ġbe Ġinvoked Ġfor Ġthis Ġcase . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ 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 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠCallback . are Contents The Same ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠSleep Night , Ġnew Item : ĠSleep Night ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠ Ġ} Ċ Ċ }