package Ġcom . example . screens . home . food s _ view pager Ċ Ċ 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 . R Ċ import Ġcom . example . databinding . ListItem Food s Binding Ċ import Ġcom . example . nbt _ domain . models . Food Ċ import Ġcom . google . android . material . chip . Chip Ċ Ċ class ĠFood ListAdapter ( private Ġval Ġclick Listener : ĠFood List Listener ) Ġ: ĊĠĠĠ ĠList Adapter < Food , ĠFood ListAdapter . Food ViewHolder >( Food Diff Callback ()) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġselected Set Ġ= Ġmutable Set Of < String >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠFood ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFood ViewHolder . from ( parent , Ġselected Set ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠFood ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠ Ġholder . bind ( item , Ġclick Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFood ViewHolder Ġprivate Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbinding : ĠListItem Food s Binding , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġselected Set : ĠMutable Set < String > ĊĠĠĠ Ġ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( item : ĠFood , Ġclick Listener : ĠFood List Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . food Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . add Btn . isChecked Ġ= Ġ( selected Set . contains ( item . id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . add Btn . setOnClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġ( v Ġas ĠCh ip ). isChecked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Listener . onClick ( item , Ġstate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . text Ġ= Ġv . context . getString ( R . string . text _ added _ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Set . add ( item . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . text Ġ= Ġv . context . getString ( R . string . text _ 5 0 _ usd ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Set . remove ( item . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfrom ( parent : ĠViewGroup , Ġselected Set : ĠMutable Set < String >): ĠFood ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠListItem Food s Binding . inflate ( layout Inflater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFood ViewHolder ( binding , Ġselected Set ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠFood List Listener ( val Ġclick Listener : Ġ( food : ĠFood , Ġis Added : ĠBoolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġfun ĠonClick ( food : ĠFood , Ġis Added : ĠBoolean ) Ġ= Ġclick Listener ( food , Ġis Added ) Ċ } ĊĊ Ċ class ĠFood Diff Callback Ġ: ĠDiff Util . Item Callback < Food >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠFood , Ġnew Item : ĠFood ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠFood , Ġnew Item : ĠFood ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠ Ġ} Ċ }