package Ġcom . s let ical boy . weight . x recycler . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . St agger ed Grid LayoutManager Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġon Ġ 1 8 - 2 - 7 . Ċ Ġ* Ċ Ġ* Ġ@ author Ġle eb in Ċ Ġ* Ġ@ version Ġ 1 . 0 Ċ Ġ* Ġ@ description Ċ Ġ*/ Ċ abstract Ġclass ĠX Recycler Adapter < M > Ġ: ĠRecyclerView . Adapter < X Base Holder < M >> Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġm Lock Ġ= ĠAny () ĊĠĠĠ Ġprivate Ġval Ġm Headers : ĠMutable List < Header View > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġval Ġm Foot ers : ĠMutable List < Footer View > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġvar Ġm On ItemClickListener : ĠOn ItemClickListener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm On Item Long ClickListener : ĠOn Item Long ClickListener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm DataList : ĠMutable List < M >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġm RecyclerView : ĠRecyclerView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Notify OnChange Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġcount : ĠInt ? Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġcontext : ĠContext ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , ĠArrayList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( context : ĠContext , Ġdata List : ĠList < M >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . context Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġm DataList Ġ= ĠArrayList ( data List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġdata Array : ĠArray < M >) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , ĠlistOf (* data Array )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġdata List : ĠList < M >) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġdata List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠX Base Holder < M > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġcreate View By ViewType ( parent , Ġview Type ) ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPlace Holder ( view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġholder Ġ= ĠonCreate Item Holder ( parent , Ġview Type ) ĊĠĠĠĠĠĠĠ Ġ// Ġfinal Ġint Ġposition Ġ= Ġholder . get Adapter Position () Ġ- Ġm Headers . size (); ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġholder . adapter Position ĊĠĠĠĠĠĠĠ Ġif Ġ( m On ItemClickListener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ Ġm On ItemClickListener !!. on Item Click ( position ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m On Item Long ClickListener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOn Long ClickListener Ġ{ Ġm On Item Long ClickListener !!. on Item Long Click ( position ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġholder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate View By ViewType ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( header View Ġin Ġm Headers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( header View . hashCode () Ġ== Ġview Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget View ( parent , Ġheader View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( footer View Ġin Ġm Foot ers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( footer View . hashCode () Ġ== Ġview Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget View ( parent , Ġfooter View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun ĠonCreate Item Holder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠX Base Holder < M > ĊĊĠĠĠ Ġprivate Ġfun Ġget View ( parent : ĠViewGroup , ĠitemView : ĠItem View ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠitemView . onCreate View ( parent ) ĊĠĠĠĠĠĠĠ Ġval Ġparams : ĠSt agger ed Grid LayoutManager . LayoutParams ĊĠĠĠĠĠĠĠ Ġparams Ġ= Ġif Ġ( view . layout Params Ġ!= Ġnull ) ĠSt agger ed Grid LayoutManager . LayoutParams ( view . layout Params ) Ġelse ĠSt agger ed Grid LayoutManager . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĠViewGroup . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġparams . is Full Span Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġview . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠX Base Holder < M >, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . item View . id Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġif Ġ( m Headers . size Ġ!= Ġ 0 Ġ&& Ġposition Ġ< Ġm Headers . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Headers [ position ]. on BindView ( holder . item View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Foot ers . size Ġ!= Ġ 0 Ġ&& Ġposition Ġ>= Ġm Headers . size Ġ+ Ġm DataList !!. size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Foot ers [ position Ġ- Ġm Headers . size Ġ- Ġm DataList !!. size ]. on BindView ( holder . item View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġholder . bind Data ( getItem Data ( position )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ Ġitem Ġæķ°æį® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun ĠgetItem Data ( position : ĠInt ): ĠM Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm DataList ! ![ position ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Headers . size Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ< Ġm Headers . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Headers [ position ]. hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Foot ers . size Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ>= Ġm Headers . size Ġ+ Ġm DataList !!. size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Foot ers [ position Ġ- Ġm Headers . size Ġ- Ġm DataList !!. size ]. hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġget ViewType ( position Ġ- Ġm Headers . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Headers . size Ġ+ Ġget Count () Ġ+ Ġm Foot ers . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetData ( data List : ĠMutable List < M > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm DataList Ġ= Ġdata List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetData ( data Array : ĠArray < M >) Ġ{ ĊĠĠĠĠĠĠĠ Ġm DataList Ġ= Ġdata Array . to Mutable List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġall Data : ĠList < M >? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm DataList ĊĊĠĠĠ Ġfun Ġget Position ( item : ĠM ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm DataList !!. indexOf ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd (` object `: ĠM ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd ( getCount (), Ġ` object `) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ-------------------- å¯¹ æķ°æį®çļĦ ä¸ĢäºĽ æĵįä½ľ ------------------- ĊĠĠĠ Ġfun Ġadd ( index : ĠInt , Ġ` object `: ĠM ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ> Ġget Count () Ġ|| Ġindex Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException (" Index : Ġ$ index , ĠSize : Ġ$ count ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(` object ` Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( m Lock ) Ġ{ Ġm DataList !!. add ( index , Ġ` object `) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Notify OnChange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Inserted ( index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd All ( collection : ĠCollection < M > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd All ( getCount (), Ġcollection ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd All ( index : ĠInt , Ġcollection : ĠCollection < M > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ> Ġget Count () Ġ|| Ġindex Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException (" Index : Ġ$ index , ĠSize : Ġ$ count ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( collection Ġ!= Ġnull Ġ&& Ġcollection . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( m Lock ) Ġ{ Ġm DataList !!. addAll ( index , Ġcollection ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdata Count Ġ= Ġcollection ?. size Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( m Notify OnChange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( index , Ġdata Count ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( position : ĠInt , Ġ` object `: ĠM ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Lock ) Ġ{ Ġm DataList !!. set ( position , Ġ` object `) Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Notify OnChange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove (` object `: ĠM ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġm DataList !!. indexOf (` object `) ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m DataList !!. remove (` object ` )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Notify OnChange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Removed ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Lock ) Ġ{ Ġm DataList !!. remove At ( position ) Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Notify OnChange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Removed ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove All () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġm DataList !!. size ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Lock ) Ġ{ Ġm DataList !!. clear () Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Notify OnChange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Range Changed ( 0 , Ġcount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġm DataList !!. size ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Lock ) Ġ{ Ġm DataList !!. clear () Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Notify OnChange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsort ( comparator : ĠComparator < in ĠM > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( m Lock ) Ġ{ ĠCollections . sort ( m DataList , Ġcomparator ) Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Notify OnChange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Header ( header View : ĠHeader View ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( header View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" view Ġcan Ġnot Ġbe Ġnull ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Headers . add ( header View ) ĊĠĠĠĠĠĠĠ Ġnotify Item Inserted ( m Headers . size Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ-------------------- å¯¹ æķ°æį®çļĦ ä¸ĢäºĽ æĵįä½ľ ------------------- ĊĠĠĠ Ġ// Ġ------------- å¯¹ Ġheader ĠåĴĮ Ġfooter ĠçļĦ ä¸ĢäºĽ æĵįä½ľ ------------ ĊĠĠĠ Ġfun Ġget Header ( position : ĠInt ): ĠHeader View Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Headers [ position ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Header ( header View : ĠHeader View ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġm Headers . indexOf ( header View ) ĊĠĠĠĠĠĠĠ Ġm Headers . remove ( header View ) ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove All Headers () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġm Headers . size ĊĠĠĠĠĠĠĠ Ġm Headers . clear () ĊĠĠĠĠĠĠĠ Ġnotify Item Range Removed ( 0 , Ġcount ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Footer ( footer View : ĠFooter View ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( footer View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" view Ġcan Ġnot Ġbe Ġnull ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Foot ers . add ( footer View ) ĊĠĠĠĠĠĠĠ Ġnotify Item Inserted ( m Foot ers . size Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Footer ( position : ĠInt ): ĠFooter View Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Foot ers [ position ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Footer ( footer View : ĠFooter View ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġm Foot ers . indexOf ( footer View ) ĊĠĠĠĠĠĠĠ Ġm Foot ers . remove ( footer View ) ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove All Foot ers () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġm Foot ers . size ĊĠĠĠĠĠĠĠ Ġm Foot ers . clear () ĊĠĠĠĠĠĠĠ Ġnotify Item Range Removed ( 0 , Ġcount ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġheaders Count : ĠInt Ġget () Ġ= Ġm Headers . size ĊĊĠĠĠ Ġval Ġfoot ers Count : ĠInt Ġget () Ġ= Ġm Foot ers . size ĊĊĠĠĠ Ġfun Ġset Notify OnChange ( notify OnChange : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Notify OnChange Ġ= Ġnotify OnChange ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ------------- å¯¹ Ġheader ĠåĴĮ Ġfooter ĠçļĦ ä¸ĢäºĽ æĵįä½ľ ------------ ĊĠĠĠ Ġfun Ġset On ItemClickListener ( on ItemClickListener : ĠOn ItemClickListener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm On ItemClickListener Ġ= Ġon ItemClickListener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Item Long ClickListener ( on Item Long ClickListener : ĠOn Item Long ClickListener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm On Item Long ClickListener Ġ= Ġon Item Long ClickListener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHeader Ġor ĠFooter ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠItem View Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCall Ġwhen Ġthe Ġitem Ġwas Ġcreated ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthe ĠView Ġitself ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠonCreate View ( parent : ĠViewGroup ?): ĠView ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen Ġ Ġbinding Ġview ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠitemView Ġitem Ġview ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon BindView ( item View : ĠView ?) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠHeader View Ġ: ĠItem View ĊĠĠĠ Ġinterface ĠFooter View Ġ: ĠItem View ĊĠĠĠ Ġinterface ĠOn ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Click ( position : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Item Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Long Click ( position : ĠInt ): ĠBoolean ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġplaceholder ĊĠĠĠ Ġprivate Ġinner Ġclass ĠPlace Holder ( item View : ĠView ?) Ġ: ĠX Base Holder < M >( item View ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind Data ( data : ĠM ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġget Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm DataList !!. size ĊĠĠĠ Ġ} Ċ }