package Ġcom . f red rik bo gg . android _ chat _ app . ui . users Ċ Ċ 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 . f red rik bo gg . android _ chat _ app . data . db . entity . User Ċ import Ġcom . f red rik bo gg . android _ chat _ app . databinding . ListItem User Binding ĊĊ Ċ class ĠUsers ListAdapter Ġinternal Ġconstructor ( private Ġval ĠviewModel : ĠUsers ViewModel ) Ġ: ĊĠĠĠ ĠList Adapter < User , ĠUsers ListAdapter . ViewHolder >( User Diff Callback ()) Ġ{ ĊĊĠĠĠ Ġclass ĠViewHolder ( private Ġval Ġbinding : ĠListItem User Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( viewModel : ĠUsers ViewModel , Ġitem : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . view model Ġ= ĠviewModel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . user Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( viewModel , ĠgetItem ( position )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠListItem User Binding . inflate ( layout Inflater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( binding ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠUser Diff Callback Ġ: ĠDiff Util . Item Callback < User >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠUser , Ġnew Item : ĠUser ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠUser , Ġnew Item : ĠUser ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item . info . id Ġ== Ġnew Item . info . id ĊĠĠĠ Ġ} Ċ }