/* Ċ Ġ* ĠCopyright Ġ( C ) Ġby ĠM inter Team . Ġ 2 0 2 1 Ċ Ġ* Ġ@ link Ġ< a Ġhref =" https :// github . com / M inter Team "> Org ĠGithub </ a > Ċ Ġ* Ġ@ link Ġ< a Ġhref =" https :// github . com / ed ward stock "> Maint ainer ĠGithub </ a > Ċ Ġ* Ċ Ġ* ĠThe ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġnetwork . min ter . bip wallet . internal . views . list . multi row Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . view binding . View Binding Ċ Ċ /** Ċ Ġ* Ġm inter - android - wallet . Ġ 2 0 2 0 Ċ Ġ* Ġ@ author ĠE du ard ĠMax im ov ich Ġ( ed ward . v stock @ gmail . com ) Ċ Ġ*/ Ċ Ċ class ĠBinding ViewHolder < out ĠT Ġ: ĠView Binding >( val Ġbinding : ĠT ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ċ Ċ interface ĠBinding Row < B Ġ: ĠView Binding > Ġ{ ĊĠĠĠ Ġfun Ġon Bind ( binding : ĠB ) ĊĠĠĠ Ġfun Ġon Un bind ( binding : ĠB ) Ġ{} ĊĠĠĠ Ġfun Ġget Binding Class (): ĠClass < B > Ċ } Ċ Ċ open Ġclass ĠBinding Multi Row Adapter Ġ: ĠRecyclerView . Adapter < Binding ViewHolder < View Binding >>() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġinflater : ĠLayoutInflater ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġitems Ġ= ĠArrayList < Binding Row < View Binding >>() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBinding ViewHolder < View Binding > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( in flater Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġitems [ view Type ] ĊĠĠĠĠĠĠĠ Ġval Ġinf late Func Ġ= Ġrow . get Binding Class (). getMethod (" inflate ", ĠLayoutInflater :: class . java , ĠViewGroup :: class . java , ĠBoolean :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġview Binding Ġ= Ġinf late Func . invoke ( null , Ġinflater !! , Ġparent , Ġfalse ) Ġas ĠView Binding ĊĠĠĠĠĠĠĠ Ġreturn ĠBinding ViewHolder ( view Binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġposition ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠBinding ViewHolder < View Binding >, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġitems [ position ] ĊĊĠĠĠĠĠĠĠ Ġrow . on Bind ( row . get Binding Class (). cast ( holder . binding ) !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Detached From Window ( holder : ĠBinding ViewHolder < View Binding >) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Detached From Window ( holder ) ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġholder . absolute Adapter Position ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġitems [ position ] ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . on Bind ( holder . binding ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠClass CastException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġadd ( row : ĠBinding Row <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . add ( row Ġas ĠBinding Row < View Binding >) ĊĠĠĠĠĠĠĠ Ġnotify Item Inserted ( item Count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġadd All ( rows : ĠList < Binding Row <* >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġitems . size ĊĠĠĠĠĠĠĠ Ġitems . addAll ( rows . map Ġ{ Ġit Ġas ĠBinding Row < View Binding > Ġ}) ĊĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( pos , Ġrows . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( items . size Ġ> Ġposition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . remove At ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( items . isEmpty ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Notify () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( items . isEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġsz Ġ= Ġitems . size ĊĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠ Ġnotify Item Range Removed ( 0 , Ġsz ) ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ