package Ġcom . anc ient lo re . stick ies Ċ Ċ import Ġandroid . support . annotation . Ui Thread Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . ViewGroup Ċ Ċ abstract Ġclass ĠHe aded Recycler Adapter < P , ĠT : ĠRecyclerView . ViewHolder >( Ċĉ ĉ protected Ġval Ġitems : ĠMutable List < P >, Ċĉ ĉ private Ġval Ġwith Header : ĠBoolean Ġ= Ġfalse , Ċĉ ĉ private Ġval Ġwith Footer : ĠBoolean Ġ= Ġfalse ) Ċ ĉ : ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ Ċ ĉ comp anion Ġobject Ġ{ Ċĉ ĉ private Ġconst Ġval ĠVIEW _ TYPE _ HEADER Ġ= ĠInt . MIN _ VALUE Ċĉ ĉ private Ġconst Ġval ĠVIEW _ TYPE _ FO OTER Ġ= ĠInt . MAX _ VALUE Ċ ĉ } ĊĊ ĉ protected Ġabstract Ġfun ĠgetItem ViewType Inner ( position : ĠInt ): ĠInt ĊĊ ĉ protected Ġabstract Ġfun ĠonCreate ViewHolder Inner ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠT ĊĊ ĉ protected Ġabstract Ġfun Ġon Bind ViewHolder Inner ( holder : ĠT , Ġposition : ĠInt ) ĊĊ ĉ final Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ Ċĉ ĉ var Ġitem Count Ġ= Ġitems . size Ċĉ ĉ if Ġ( with Header ) Ġitem Count ++ Ċĉ ĉ if Ġ( with Footer ) Ġitem Count ++ Ċĉ ĉ return Ġitem Count Ċ ĉ } ĊĊ ĉ final Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ Ċĉ ĉ if Ġ( with Header Ġ&& Ġis First Position ( position )) Ċĉĉ ĉ return ĠVIEW _ TYPE _ HEADER Ċĉ ĉ if Ġ( with Footer Ġ&& Ġis Last Position ( position )) Ċĉĉ ĉ return ĠVIEW _ TYPE _ FO OTER Ċĉ ĉ return ĠgetItem ViewType Inner ( getItem Position ( position )) Ċ ĉ } ĊĊ ĉ final Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ Ċĉ ĉ if Ġ( with Header Ġ&& Ġview Type Ġ== ĠVIEW _ TYPE _ HEADER ) Ċĉĉ ĉ return Ġcreate Header ViewHolder ( parent ) Ċĉ ĉ if Ġ( with Footer Ġ&& Ġview Type Ġ== ĠVIEW _ TYPE _ FO OTER ) Ċĉĉ ĉ return Ġcreate Footer ViewHolder ( parent ) Ċĉ ĉ return ĠonCreate ViewHolder Inner ( parent , Ġview Type ) Ċ ĉ } ĊĊ ĉ final Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ Ċĉ ĉ if Ġ( with Header Ġ&& Ġis First Position ( position )) Ċĉĉ ĉ bind Header ViewHolder ( holder ) Ċĉ ĉ else Ġif Ġ( with Footer Ġ&& Ġis Last Position ( position )) Ċĉĉ ĉ bind Footer ViewHolder ( holder ) Ċĉ ĉ else Ġon Bind ViewHolder Inner ( holder Ġas ĠT , ĠgetItem Position ( position )) Ċ ĉ } ĊĊ ĉ @ Ui Thread Ċ ĉ fun Ġnotify Header Changed () Ġ= Ġnotify Item Changed ( 0 ) ĊĊ ĉ @ Ui Thread Ċ ĉ fun Ġnotify Footer Changed () Ġ= Ġnotify Item Changed ( getLast Position ()) ĊĊ ĉ @ Ui Thread Ċ ĉ fun Ġnotify ListItem Changed ( position : ĠInt ) Ġ= Ġnotify Item Changed ( getView Position ( position )) ĊĊ ĉ @ Ui Thread Ċ ĉ fun Ġnotify ListItem Inserted ( position : ĠInt ) Ġ= Ġnotify Item Inserted ( getView Position ( position )) ĊĊ ĉ @ Ui Thread Ċ ĉ fun Ġnotify ListItem Removed ( position : ĠInt ) Ġ= Ġnotify Item Removed ( getView Position ( position )) ĊĊ ĉ @ Ui Thread Ċ ĉ fun Ġnotify ListItem Moved ( from Pos : ĠInt , Ġto Pos : ĠInt ) Ġ= Ġnotify Item Moved ( getView Position ( from Pos ), Ġget View Position ( to Pos )) ĊĊ ĉ @ Ui Thread Ċ ĉ fun Ġnotify List Items Changed ( start Pos : ĠInt , Ġcount : ĠInt ) Ġ= Ġnotify Item Range Changed ( getView Position ( start Pos ), Ġcount ) ĊĊ ĉ @ Ui Thread Ċ ĉ fun Ġnotify ListItem Range Inserted ( start Pos : ĠInt , Ġcount : ĠInt ) Ġ= Ġnotify Item Range Inserted ( getView Position ( start Pos ), Ġcount ) ĊĊ ĉ @ Ui Thread Ċ ĉ fun Ġnotify ListItem Range Removed ( start Pos : ĠInt , Ġcount : ĠInt ) Ġ= Ġnotify Item Range Removed ( getView Position ( start Pos ), Ġcount ) ĊĊ ĉ @ Ui Thread Ċ ĉ fun Ġnotify ListItem Range Changed ( start Pos : ĠInt , Ġcount : ĠInt , Ġpayload : ĠAny ?) Ġ= Ġnotify Item Range Changed ( getView Position ( start Pos ), Ġcount , Ġpayload ) ĊĊ ĉ protected Ġopen Ġfun Ġcreate Header ViewHolder ( parent : ĠViewGroup ): ĠRecyclerView . ViewHolder Ġ{ Ċĉ ĉ throw ĠRuntimeException (" If Ġyou Ġuse Ġheader Ġin Ġthe Ġlist , Ġyou Ġo ught Ġto Ġoverride Ġthis Ġmethod Ġand Ġprovide Ġa Ġproper ĠViewHolder ") Ċ ĉ } ĊĊ ĉ protected Ġopen Ġfun Ġcreate Footer ViewHolder ( parent : ĠViewGroup ): ĠRecyclerView . ViewHolder Ġ{ Ċĉ ĉ throw ĠRuntimeException (" If Ġyou Ġuse Ġfooter Ġin Ġthe Ġlist , Ġyou Ġo ught Ġto Ġoverride Ġthis Ġmethod Ġand Ġprovide Ġa Ġproper ĠViewHolder ") Ċ ĉ } ĊĊ ĉ protected Ġopen Ġfun Ġbind Header ViewHolder ( holder : ĠRecyclerView . ViewHolder ) Ġ{} ĊĊ ĉ protected Ġopen Ġfun Ġbind Footer ViewHolder ( holder : ĠRecyclerView . ViewHolder ) Ġ{} ĊĊ ĉ protected Ġfun ĠisValid Position ( position : ĠInt ) Ġ= Ġposition Ġ> Ġ- 1 Ġ&& Ġposition Ġ< Ġitems . size ĊĊ ĉ private Ġfun Ġis First Position ( position : ĠInt ) Ġ= Ġposition Ġ== Ġ 0 ĊĊ ĉ private Ġfun Ġis Last Position ( position : ĠInt ) Ġ= Ġposition Ġ== ĠgetLast Position () ĊĊ ĉ private Ġfun ĠgetLast Position () Ġ= Ġitem Count Ġ- Ġ 1 ĊĊ ĉ private Ġfun ĠgetItem Position ( view Position : ĠInt ) Ġ= Ġif Ġ( with Header ) Ġview Position Ġ- Ġ 1 Ġelse Ġview Position ĊĊ ĉ private Ġfun Ġget View Position ( item Position : ĠInt ) Ġ= Ġif Ġ( with Header ) Ġitem Position Ġ+ Ġ 1 Ġelse Ġitem Position Ċ }