package Ġcom . example . tod olist . home task Ċ Ċ 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 . tod olist . databinding . RecyclerView Task Item Binding Ċ import Ġcom . example . tod olist . datasource . model . Task Ċ Ċ class ĠTask Adapter ( ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠTasks ViewModel Ċ ): ListAdapter < Task , ĠTask Adapter . Task ViewHolder >( Task Diff Callback ()) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠTask ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTask ViewHolder . from ( parent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠTask ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠ Ġholder . bind ( viewModel , Ġtask ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠTask ViewHolder Ġprivate Ġconstructor ( private Ġval Ġbinding : ĠRecyclerView Task Item Binding ): ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ){ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( viewModel : ĠTasks ViewModel , Ġitem : ĠTask ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . task Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfrom ( parent : ĠViewGroup ): ĠTask ViewHolder { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠRecyclerView Task Item Binding . inflate ( layout Inflater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTask ViewHolder ( binding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCallback Ġfor Ġcalculating Ġthe Ġdiff Ġbetween Ġtwo Ġnon - null Ġitems Ġin Ġa Ġlist . Ċ Ġ* Ċ Ġ* ĠUsed Ġby ĠList Adapter Ġto Ġcalculate Ġthe Ġminimum Ġnumber Ġof Ġchanges Ġbetween Ġand Ġold Ġlist Ġand Ġa Ġnew Ċ Ġ* Ġlist Ġthat 's Ġbeen Ġpassed Ġto Ġ` submit List `. Ċ Ġ*/ Ċ class ĠTask Diff Callback Ġ: ĠDiff Util . Item Callback < Task > (){ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠTask , Ġnew Item : ĠTask ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠTask , Ġnew Item : ĠTask ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠ Ġ} Ċ }