package Ġcom . pr ush h . mv vm shop . adapters Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Async List Differ Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . pr ush h . mv vm shop . R Ċ import Ġcom . pr ush h . mv vm shop . models . shop . Product Ċ import Ġkotlinx . android . synt hetic . main . item _ product _ preview . view .* Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġprovide Ġthe Ġdisplay Ġof Ġarticles Ġin ĠRecyclerView . Ċ Ġ* Ġ@ param Ġis Saved Fragment ĠOptional , Ġused Ġto Ġshow Ġdifferent Ġinformation . Ċ Ġ*/ Ċ class ĠProduct Adapter ( ĊĠĠĠ Ġprivate Ġvar Ġis Saved Fragment : ĠBoolean Ġ= Ġfalse Ċ ) Ġ: ĠRecyclerView . Adapter < Product Adapter . Product ViewHolder >() Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġinner Ġclass Ġprovide Ġto Ġoverride Ġmethods Ġof ĠRecyclerView . ViewHolder (). ĊĠĠĠĠ Ġ* ĠIt Ġcan Ġaccess Ġto Ġthe Ġmembers Ġof Ġits Ġouter Ġclass . ĊĠĠĠĠ Ġ* Ġ@ param ĠitemView ĠSingle Ġitem Ġdisplayed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinner Ġclass ĠProduct ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIt 's Ġcalled ĠObject ĠExpression : Ġobject Ġof Ġan Ġanonymous Ġclass , ĊĠĠĠĠ Ġ* Ġused Ġfor Ġanalyze Ġchanged Ġitems Ġinside Ġcurrent Ġlist . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġdiffer Callback Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < Product >() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġtwo Ġitems Ġinside Ġcurrent Ġlist Ġhave Ġthe Ġsame Ġid . ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠProduct , Ġnew Item : ĠProduct ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġtwo Ġitems Ġinside Ġcurrent Ġlist Ġhave Ġthe Ġsame Ġcontents . ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠProduct , Ġnew Item : ĠProduct ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTool Ġthat Ġtakes Ġtwo Ġlists Ġand Ġcomp ares Ġthem , Ġcalculating Ġthe Ġdifferences . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdiffer Ġ= ĠAsync List Differ ( this , Ġdiffer Callback ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġthe Ġview Ġholder Ġby Ġspecifying Ġthe Ġlayout . ĊĠĠĠĠ Ġ* Ġ@ param Ġparent ĠViewGroup Ġinto Ġwhich Ġthe Ġnew ĠView Ġwill Ġbe Ġadded . ĊĠĠĠĠ Ġ* Ġ@ param Ġview Type ĠThe Ġview Ġtype Ġof Ġthe Ġnew ĠView . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠProduct ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠProduct ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ product _ preview , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġsize Ġof Ġcurrent Ġlist , Ġthat Ġcontain Ġitems . ĊĠĠĠĠ Ġ* Ġ@ return ĠInt : Ġnumber Ġof Ġitems Ġin Ġcurrent Ġlist . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdiffer . current List . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefined Ġin Ġthe ĠFragment . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġon ItemClickListener : Ġ(( Product ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFill ĠUI Ġfields Ġwith Ġcurrent Ġitem Ġinformation . ĊĠĠĠĠ Ġ* Ġ@ param Ġholder ĠRepresent Ġthe Ġcontents Ġof Ġthe Ġitem Ġat Ġche Ġgiven Ġposition . ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠSelected Ġitem Ġposition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠProduct ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct Ġ= Ġdiffer . current List [ position ] ĊĊĠĠĠĠĠĠĠ Ġ// ĠFill Ġitems Ġinformation Ġto ĠUI . ĊĠĠĠĠĠĠĠ Ġholder . item View . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( this ). load ( product . url To Image ). into ( iv Product Image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Title . text Ġ= Ġproduct . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Description . text Ġ= Ġproduct . description ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Category . text Ġ= Ġresources . getString ( R . string . category , Ġproduct . category ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Quantity Or Date . text Ġ= Ġif Ġ( is Saved Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . save _ at , Ġproduct . save At ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . quantity , Ġproduct . quantity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġnot Ġnull , Ġprovide Ġto Ġput Ġcurrent Ġproduct . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ItemClickListener ?. let Ġ{ Ġit ( product ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUsed Ġto Ġdefine Ġthe Ġlistener Ġin Ġthe Ġfragment . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset On ItemClickListener ( listener : Ġ( Product ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon ItemClickListener Ġ= Ġlistener ĊĠĠĠ Ġ} Ċ }