package Ġme . ch un yu . ui . recyclerview Ċ Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . ViewGroup Ċ import Ġme . ch un yu . recyclerview . R Ċ import Ġme . ch un yu . ui . utils . inflate Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . collections . count Ċ import Ġkotlin . collections . set Ċ Ċ /* ĊĠĠĠ Ġthere Ġare Ġtwo Ġways Ġto Ġbind ĠViewHolder Ġsubclass Ġwith ĠCY Item Model ĊĠĠĠĠ 1 . Ġcall Ġmap Model ViewHolder Ġmanually Ġfor Ġeach Ġ( model , Ġholder ) Ġpair ĊĠĠĠĠ 2 . Ġreturn Ġa ĠCY ViewHolder Creator Ġfrom ĠCY Item Model :: get ViewHolder Creator () Ċ Ġ*/ Ċ class ĠRe cycler Adapter ( items : ĠArrayList < CY Item Model > ?) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Items Ġ= ĠArrayList < CY Item Model >() ĊĊĠĠĠ Ġ// ĠModel Ġ-> Ġview Type ĊĠĠĠ Ġprivate Ġval Ġm ViewType Map Ġ= ĠHashMap < Any , ĠInt >() ĊĊĠĠĠ Ġ// Ġview Type Ġ-> ĠViewHolder Creator ĊĠĠĠ Ġprivate Ġval Ġm Holder Map Ġ= ĠHashMap < Int , ĠCY ViewHolder Creator >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( items Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Items ( items ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Items ( items : ĠArrayList < CY Item Model >) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Items . addAll ( items ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Item ( item : ĠCY Item Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Items . add ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( item : ĠCY Item Model , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Items . add ( position , Ġitem ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Item At ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Items . remove At ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmap Model ViewHolder ( model Class : ĠAny , Ġcreator : ĠCY ViewHolder Creator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Holder Map [ creator . view Type ] Ġ= Ġcreator ĊĠĠĠĠĠĠĠ Ġm ViewType Map [ model Class ] Ġ= Ġcreator . view Type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ: ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Items . count () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġm Items [ position ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠCY Item ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . should Update ( item ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( holder Ġis ĠCY Dummy ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrem ind Ġuser Ġthat Ġhe Ġforget Ġto Ġmap ĠCY Item Model Ġto ĠCY Item ViewHolder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġnon ViewHolder Map Msg ( item , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . update With Msg ( msg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġm Items [ position ] ĊĊĠĠĠĠĠĠĠ Ġval Ġcls Ġ= Ġitem :: class ĊĊĠĠĠĠĠĠĠ Ġval Ġview Type Ġ= Ġm ViewType Map [ cls ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( view Type Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreator Ġ= Ġitem . get ViewHolder Creator () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( creator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Model ViewHolder ( cls , Ġcreator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreator . view Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview Type ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmeta Ġ= Ġm Holder Map [ view Type ] ĊĠĠĠĠĠĠĠ Ġif Ġ( meta Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmeta . create ( parent , Ġview Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġinfl ated View Ġ= Ġparent . inflate ( R . layout . dummy _ recyclerview _ item _ row , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠCY Dummy ViewHolder ( in fl ated View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnon ViewHolder Map Msg ( item : ĠCY Item Model , Ġposition : ĠInt ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġitem :: class . toString () Ġ+ Ġ" Ġat Ġposition Ġ" Ġ+ Ġposition . toString () Ġ+ Ġ" Ġdid Ġnot Ġmap Ġto Ġany Ġview Ġholder " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n TODO :" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n ĠĠ 1 . Ġimplement ĠCY Item Model :: get ViewHolder Creator Ġin Ġyour Ġmodel Ġclass ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n ĠĠ 2 . Ġcall ĠRe cycler Adapter :: map Model ViewHolder Ġto Ġmap Ġyour Ġmodel Ġto Ġa ĠViewHolder ;" ĊĠĠĠĠĠĠĠ Ġreturn Ġmsg ĊĠĠĠ Ġ} Ċ }