package Ġio . any rtc . team view . utils Ċ Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . Id Res Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġjava . util . ArrayList ĊĊ Ċ class ĠAdapter < T > Ġ: ĠRecyclerView . Adapter < Adapter . Holder > Ġ{ ĊĠĠĠ Ġvar Ġdata : ĠArrayList < T > ĊĠĠĠ Ġprivate Ġvar Ġon BindView : ĠOn BindView < T > ĊĠĠĠ Ġprivate Ġvar Ġon ItemType : ĠOn ItemType < T > ĊĠĠĠ Ġprivate Ġvar Ġlayout Id : ĠInt Array ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġdata : ĠArrayList < T >, ĊĠĠĠĠĠĠĠ Ġon BindView : ĠOn BindView < T >, ĊĠĠĠĠĠĠĠ Ġon ItemType : ĠOn ItemType < T >, ĊĠĠĠĠĠĠĠ Ġlayout Id : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . data Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġthis . on BindView Ġ= Ġon BindView ĊĠĠĠĠĠĠĠ Ġthis . on ItemType Ġ= Ġon ItemType ĊĠĠĠĠĠĠĠ Ġthis . layout Id Ġ= Ġlayout Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( data : ĠArrayList < T >, Ġon BindView : ĠOn BindView < T >, Ġlayout Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . data Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġthis . on BindView Ġ= Ġon BindView ĊĠĠĠĠĠĠĠ Ġon ItemType Ġ= Ġobject Ġ: ĠOn ItemType < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Type ( t : ĠT ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . layout Id Ġ= Ġint ArrayOf ( layout Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠH older Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġreturn ĠH older ( in flater . inflate ( layout Id [ view Type ], Ġparent , Ġfalse )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( data . isEmpty ()) Ġsuper . getItem ViewType ( position ) Ġelse Ġon ItemType . getItem Type ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ position ] ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠH older , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon BindView . on Bind ( holder , Ġdata [ position ], Ġposition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠH older ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠView ?> Ġfind View (@ Id Res Ġid : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview : ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== ĠitemView . tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsparse Array Ġ= ĠSparse Array < View >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . tag Ġ= Ġsparse Array ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= ĠitemView . findViewById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsparse Array . put ( id , Ġview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsparse Array Ġ= ĠitemView . tag Ġas ĠSparse Array < T > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġsparse Array . indexOf Key ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġsparse Array . value At ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= ĠitemView . findViewById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsparse Array . put ( id , Ġview ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinterface ĠOn BindView < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Bind ( holder : ĠH older , Ġt : ĠT , Ġposition : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn ItemType < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠgetItem Type ( t : ĠT ): ĠInt ĊĠĠĠ Ġ} Ċ }