package Ġcom . micro te ars . orange . recyclerview . adapter Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ fun ĠRecyclerView . multi Type Adapter (): ĠMulti Type Adapter ? Ġ{ ĊĠĠĠ Ġreturn Ġadapter Ġas ? ĠMulti Type Adapter Ċ } Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ fun Ġ< E , ĠV H Ġ: ĠViewHolder > Ġholder Of ( ĊĠĠĠ ĠitemView : ĠView , ĊĠĠĠ Ġon Payload : Ġ(( holder : ĠV H , Ġitem : ĠE , Ġpayload s : ĠMutable List < Any >) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġon Bind : Ġ( holder : ĠV H , Ġitem : ĠE ) Ġ-> ĠUnit Ċ ): ĠV H Ġ{ ĊĠĠĠ Ġreturn Ġobject Ġ: ĠViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T > Ġon Bind ( data : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Bind ( this Ġas ĠV H , Ġdata Ġas ĠE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T > Ġon Bind ( data : ĠT , Ġpayload s : ĠMutable List < Any >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Payload Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Bind ( data , Ġpayload s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Payload ( this Ġas ĠV H , Ġdata Ġas ĠE , Ġpayload s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġas ĠV H Ċ } Ċ Ċ fun Ġ< VH Ġ: ĠViewHolder > Ġfactory Of ( block : Ġ( Int , ĠView ) Ġ-> ĠV H ): ĠViewHolder Factory Ġ{ ĊĠĠĠ Ġreturn Ġobject Ġ: ĠViewHolder Factory () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( type : ĠInt , ĠitemView : ĠView ): ĠViewHolder Ġ= Ġblock ( type , ĠitemView ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T Ġ: ĠAny > Ġadapter Of ( ĊĠĠĠ Ġdata : ĠMutable List < Pair < Any , ĠInt >> Ġ= Ġmutable ListOf (), ĊĠĠĠ Ġon Payload : Ġ(( holder : ĠViewHolder , Ġitem : ĠT , Ġpayload s : ĠMutable List < Any >) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġon Bind : Ġ( holder : ĠViewHolder , Ġitem : ĠT ) Ġ-> ĠUnit Ċ ): ĠMulti Type Adapter Ġ{ ĊĠĠĠ Ġval Ġfactory Ġ= Ġobject Ġ: ĠViewHolder Factory () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( type : ĠInt , ĠitemView : ĠView ): ĠViewHolder Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder Of ( item View , Ġon Payload , Ġon Bind ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠMulti Type Adapter ( factory , Ġdata ) Ċ } Ċ Ċ fun Ġ< T Ġ: ĠAny , ĠV H Ġ: ĠViewHolder > Ġadapter TypeOf ( ĊĠĠĠ Ġdata : ĠMutable List < Pair < Any , ĠInt >> Ġ= Ġmutable ListOf (), ĊĠĠĠ Ġon Payload : Ġ(( holder : ĠV H , Ġitem : ĠT , Ġpayload s : ĠMutable List < Any >) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġon Bind : Ġ( holder : ĠV H , Ġitem : ĠT ) Ġ-> ĠUnit Ċ ): ĠMulti Type Adapter Ġ{ ĊĠĠĠ Ġval Ġfactory Ġ= Ġobject Ġ: ĠViewHolder Factory () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( type : ĠInt , ĠitemView : ĠView ): ĠV H Ġ= Ġholder Of ( item View , Ġon Payload , Ġon Bind ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠMulti Type Adapter ( factory , Ġdata ) Ċ } Ċ Ċ fun Ġmulti Adapter Of ( ĊĠĠĠ Ġfactory : ĠViewHolder Factory , ĊĠĠĠ Ġdata : ĠMutable List < Pair < Any , ĠInt >> Ġ= Ġmutable ListOf () Ċ ): ĠMulti Type Adapter Ġ{ ĊĠĠĠ Ġreturn ĠMulti Type Adapter ( factory , Ġdata ) Ċ } Ċ Ċ fun Ġ< VH Ġ: ĠViewHolder > Ġmulti Adapter Of ( ĊĠĠĠ Ġdata : ĠMutable List < Pair < Any , ĠInt >> Ġ= Ġmutable ListOf (), ĊĠĠĠ ĠonCreate : Ġ( layout Id : ĠInt , Ġview : ĠView ) Ġ-> ĠV H Ċ ): ĠMulti Type Adapter Ġ{ ĊĠĠĠ Ġreturn ĠMulti Type Adapter ( factory Of ( onCreate ), Ġdata ) Ċ }