package Ġcom . ud tt . app leg amsung . ui . main . products Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . ud tt . app leg amsung . data . entity . Displayed Product Ċ import Ġcom . ud tt . app leg amsung . data . entity . Product Ċ import Ġcom . ud tt . app leg amsung . databinding . Item Product Binding Ċ Ċ class ĠProducts Adapter Ġ: ĠList Adapter < Displayed Product , ĠProducts Adapter . ViewHolder >( Diff CallBack ()) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġlife Cycle Owner : ĠLifecycle Owner ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġitem ClickListener : ĠProduct ClickListener ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠItem Product Binding . inflate ( layout Inflater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisplayed Product Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠ Ġholder . bind ( display ed Product ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Life Cycle Owner ( life Cycle Owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . life Cycle Owner Ġ= Ġlife Cycle Owner ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset ItemClickListener ( listener : ĠProduct ClickListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem ClickListener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate ItemClickListener ( display ed Product : ĠDisplay ed Product ) Ġ= ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġitem ClickListener ?. on Product Click ( display ed Product ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠViewHolder ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbinding : ĠItem Product Binding ĊĠĠĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( display ed Product : ĠDisplay ed Product ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġlife Cycle Owner ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . display ed Product Ġ= Ġdisplayed Product ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . item ClickListener Ġ= Ġcreate ItemClickListener ( display ed Product ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDiff CallBack Ġ: ĠDiff Util . Item Callback < Displayed Product >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item : ĠDisplay ed Product , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠDisplay ed Product ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . product . id Ġ== Ġnew Item . product . id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item : ĠDisplay ed Product , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠDisplay ed Product ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }