package Ġco . ab 1 8 0 . ab shop . ui . main Ċ Ċ 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 Ġco . ab 1 8 0 . ab shop . G lide App Ċ import Ġco . ab 1 8 0 . ab shop . data . model . Product Ċ import Ġco . ab 1 8 0 . ab shop . databinding . Product Item Binding Ċ import Ġco . ab 1 8 0 . ab shop . ui . details . Details Activity Ċ import Ġcom . bump tech . glide . G lide Ċ Ċ object ĠProduct Diff Callback Ġ: ĠDiff Util . Item Callback < Product >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠProduct , Ġnew Item : ĠProduct ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠProduct , Ġnew Item : ĠProduct ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠProduct ViewHolder ( private Ġval Ġbinding : ĠProduct Item Binding ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠ Ġfun Ġbind ( product : ĠProduct ) Ġ{ ĊĠĠĠĠĠĠĠ ĠG lide App . with ( item View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( product . image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fit Center () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( binding . imageView ) ĊĠĠĠĠĠĠĠ Ġbinding . title Label . text Ġ= Ġproduct . title ĊĠĠĠĠĠĠĠ Ġbinding . price Label . text Ġ= ĠString . format ("$ ${ product . price }") ĊĠĠĠĠĠĠĠ Ġbinding . root . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠitemView . context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠDetails Activity . new Intent ( context , Ġproduct . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠProduct Adapter Ġ: ĠList Adapter < Product , ĠProduct ViewHolder >( Product Diff Callback ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠProduct ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠProduct Item Binding . inflate ( layout Inflater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠProduct ViewHolder ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠProduct ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( getItem ( position )) ĊĠĠĠ Ġ} Ċ }