/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 Ġ- Ġpresent ĠIn structure , ĠInc . Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ċ Ġ* Ġthe ĠFree ĠSoftware ĠFoundation , Ġversion Ġ 3 Ġof Ġthe ĠLicense . Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ċ Ġ* Ġalong Ġwith Ġthis Ġprogram . Ġ ĠIf Ġnot , Ġsee Ġ< http :// www . gnu . org / licenses />. Ċ Ġ*/ Ċ Ċ package Ġcom . in structure . p anda utils . binding Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . databinding . library . base Adapters . BR Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . in structure . p anda utils . mv vm . Item ViewModel Ċ Ċ class ĠBind able RecyclerView Adapter Ġ: ĠRecyclerView . Adapter < Bind able ViewHolder >() Ġ{ ĊĊĠĠĠ Ġvar Ġitem ViewModels : ĠList < Item ViewModel > Ġ= Ġempty List () ĊĠĠĠ Ġprivate Ġval Ġview Type Layout Map : ĠMutable Map < Int , ĠInt > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBind able ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding : ĠView Data Binding Ġ= ĠData Binding Util . inflate ( LayoutInflater . from ( parent . context ), Ġview Type Layout Map [ view Type ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ 0 , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠBind able ViewHolder ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġitem ViewModels [ position ] ĊĠĠĠĠĠĠĠ Ġif Ġ(! view Type Layout Map . containsKey ( item . view Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Type Layout Map [ item . view Type ] Ġ= Ġitem . layout Id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġitem . view Type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġitem ViewModels . size ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠBind able ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( item ViewModels [ position ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Items ( items : ĠList < Item ViewModel > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem ViewModels Ġ= Ġitems Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠBind able ViewHolder ( private Ġval Ġbinding : ĠView Data Binding ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠ Ġfun Ġbind ( item ViewModel : ĠItem ViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . set Variable ( BR . item ViewModel , Ġitem ViewModel ) ĊĠĠĠ Ġ} Ċ }