package Ġru . touch in . rob os w ag . recyclerview _ adapters . adapters Ċ Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroid . view . ViewGroup Ċ Ċ /** Ċ Ġ* ĠManager Ġfor Ġdeleg ation Ġcallbacks Ġfrom Ġ[ RecyclerView . Adapter ] Ġto Ġdeleg ates . Ċ Ġ*/ Ċ class ĠDeleg ates Manager Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdeleg ates Ġ= ĠSparse Array < Adapter Delegate <* >>() ĊĊĠĠĠ Ġfun ĠgetItem ViewType ( items : ĠList <* >, Ġadapter Position : ĠInt , Ġcollection Position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġdeleg ates . size ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelegate Ġ= Ġdeleg ates . value At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delegate . is For ViewType ( items , Ġadapter Position , Ġcollection Position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdelegate . item ViewType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Delegate Ġnot Ġfound Ġfor Ġadapter Position : Ġ$ adapter Position ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetItem Id ( items : ĠList <* >, Ġadapter Position : ĠInt , Ġcollection Position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdelegate Ġ= Ġget Delegate ( getItem ViewType ( items , Ġadapter Position , Ġcollection Position )) ĊĠĠĠĠĠĠĠ Ġreturn Ġdelegate . getItem Id ( items , Ġadapter Position , Ġcollection Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ= Ġget Delegate ( view Type ). onCreate ViewHolder ( parent ) ĊĊĠĠĠ Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġitems : ĠList <* >, Ġadapter Position : ĠInt , Ġcollection Position : ĠInt , Ġpayload s : ĠList < Any >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdelegate Ġ= Ġget Delegate ( getItem ViewType ( items , Ġadapter Position , Ġcollection Position )) ĊĠĠĠĠĠĠĠ Ġdelegate . on Bind ViewHolder ( holder , Ġitems , Ġadapter Position , Ġcollection Position , Ġpayload s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġ[ Position Adapter Delegate ] Ġto Ġadapter . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdelegate ĠDelegate Ġto Ġadd . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Delegate ( delegate : ĠAdapter Delegate <* >) Ġ= Ġdeleg ates . put ( delegate . item ViewType , Ġdelegate ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġ[ Adapter Delegate ] Ġfrom Ġadapter . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdelegate ĠDelegate Ġto Ġremove . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Delegate ( delegate : ĠAdapter Delegate <* >) Ġ= Ġdeleg ates . remove ( delegate . item ViewType ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Delegate ( view Type : ĠInt ) Ġ= Ġdeleg ates [ view Type ] Ġ?: Ġthrow ĠIllegalStateException (" No ĠAdapter Delegate Ġadded Ġfor Ġview Ġtype : Ġ$ view Type ") Ċ Ċ } Ċ