package Ġcom . example . library Ċ Ċ import Ġandroidx . annotation . Int Range Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . example . library . anim . Alpha Anim Ċ import Ġcom . example . library . anim . Scale Anim Ċ import Ġcom . example . library . anim . I Anim Ċ import Ġcom . example . library . anim . Slide Form Left Anim Ċ import Ġcom . example . library . ant ation . Anim Type Ċ import Ġcom . example . library . load more . IL o ad More View Provide Ċ import Ġcom . example . library . load more . Load More Helper Ċ import Ġcom . example . library . multiple .* Ċ Ċ /** Ċ Ġ* ĠAdapter åŁº ç±» Ċ Ġ* ĠCreated Ġby Ġ éĻĪ åģ ¥ å® ĩ Ġat Ġ 2 0 1 9 / 5 / 3 0 Ċ Ġ*/ Ċ open Ġclass ĠBase Adapter < T > Ġ: ĠRecyclerView . Adapter < Base ViewHolder > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ ĠTAG Ġ= ĠBase Adapter :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLAY OUT _ INIT _ ID Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEL AY _ TIME Ġ= Ġ 5 0 L ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ BASE Ġ= Ġ 0 x 1 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ HEADER _ VIEW Ġ= Ġ 0 x 1 1 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ LOAD _ MORE _ VIEW Ġ= Ġ 0 x 1 1 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ EMPTY _ VIEW Ġ= Ġ 0 x 1 1 1 1 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAN IM _ ALPHA Ġ= Ġ 0 x 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAN IM _ SCALE Ġ= Ġ 0 x 0 0 0 0 0 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAN IM _ SL IDE _ FROM _ LEFT Ġ= Ġ 0 x 0 0 0 0 0 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġadapter Delegate Manager : ĠMulti Item Delegate Manager < T > Ġ= ĠMulti Item Delegate Manager () ĊĠĠĠ Ġprivate Ġvar Ġm Header View : ĠLinearLayout ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Empty View : ĠFrame Layout ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Load More Helper : ĠLoad More Helper ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Item Anim : ĠI Anim ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠisOpen Item Anim Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Last Item Anim Position Ġ= Ġ- 1 ĊĊĠĠĠ Ġprivate Ġval Ġheader View Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( m Header View Ġ!= Ġnull Ġ&& Ġm Header View ?. child Count Ġ!= Ġ 0 ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġload More View Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif ( on Load More Listener Ġ!= Ġnull Ġ&& Ġis Load More Enable Ġ&& Ġ! datas . isEmpty ()) Ġ 1 Ġelse Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġload More View Position : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġheader View Count Ġ+ Ġdatas . size ĊĠĠĠ Ġprivate Ġval Ġempty View Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif ( m Empty View Ġ!= Ġnull Ġ&& Ġm Empty View ?. child Count Ġ!= Ġ 0 Ġ&& Ġis Use Empty View Ġ&& Ġdatas . isEmpty ()) Ġ 1 Ġelse Ġ 0 ĊĊĠĠĠ Ġvar Ġis Always Item Anim Ġ= Ġfalse Ġ// è®¾ç½® æĺ¯åĲ¦ æĢ» æĺ¯ åĬłè½½ item åĬ¨çĶ» ĊĠĠĠ Ġvar Ġis Use Empty View Ġ= Ġfalse // æĺ¯åĲ¦ ä½¿çĶ¨ ç©º å¸ĥå±Ģ ĊĠĠĠ Ġvar Ġis Load More End To Load More Enable Ġ= Ġfalse ĊĠĠĠ Ġvar Ġis Load More Fail To Load More Enable Ġ= Ġfalse ĊĠĠĠ Ġvar Ġon ItemClickListener : ĠOn ItemClickListener ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Item Long ClickListener : ĠOn Item Long ClickListener ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Item Child ClickListener : ĠOn Item Child ClickListener ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Item Child Long Listener : ĠOn Item Child Long Listener ? Ġ= Ġnull ĊĠĠĠ Ġvar ĠonLoad More Listener : ĠOn Load More Listener ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Load More Enable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġlayout Id Ġ: ĠInt Ġ= ĠLAY OUT _ INIT _ ID ĊĠĠĠĠĠĠ Ġset (@ Layout Res Ġvalue ){ ĊĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġdatas Ġ: ĠMutable List < T > ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġif ( value . isNull OrEmpty ()) ĠArrayList < T > Ġ() Ġelse Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġis Load More Enable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Load More Count Ġ= Ġload More View Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Load More Count Ġ= Ġload More View Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( cur Load More Count Ġ> Ġold Load More Count ){ // å¢ŀåĬł ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Load More Helper ?. cur Status Ġ= ĠLoad More Helper . STATUS _ LOADING _ COMPLETE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Inserted ( load More View Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġif ( cur Load More Count Ġ< Ġold Load More Count ){ // åĩı å°ĳ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Removed ( load More View Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æ²¡æľī æĶ¹åıĺ çļĦ æĥħåĨµ ä¸įè¦ģ Ġnotify ï¼Į éģ¿åħį éĢł æĪĲ æķ°æį® æºĲ ä¸įåĲĮ æŃ¥ å¯¼èĩ´ å´ © æº ĥ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// type åĢ¼ åįł ä½į ï¼Į éĺ² æŃ¢ å¤ĸéĥ¨ æ·»åĬł éĩįå¤į çļĦ type åĢ¼ ĊĠĠĠĠĠĠĠ Ġadd Item Delegate ( TYPE _ BASE , ĠBase Delegate ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addItem Delegate ( TYPE _ HEADER _ VIEW , ĠHeader Delegate ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addItem Delegate ( TYPE _ LOAD _ MORE _ VIEW , ĠLoad More Delegate ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addItem Delegate ( TYPE _ EMPTY _ VIEW , ĠEmpty View Delegate ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( datas Ġ: ĠMutable List < T >) Ġ: Ġthis ( datas , Ġ 0 ) ĊĠĠĠ Ġconstructor ( layout Id Ġ: ĠInt ) Ġ: Ġthis ( ArrayList < T >(), Ġlayout Id ) ĊĠĠĠ Ġconstructor ( datas Ġ: ĠMutable List < T >, Ġlayout Id Ġ: ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . datas Ġ= Ġdatas ĊĠĠĠĠĠĠĠ Ġthis . layout Id Ġ= Ġlayout Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġon BindView ( holder : ĠBase ViewHolder , Ġitem : ĠT ) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBase ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġholder : ĠBase ViewHolder Ġ= Ġwhen ( view Type ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ HEADER _ VIEW Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase ViewHolder ( m Header View !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ EMPTY _ VIEW Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase ViewHolder ( m Empty View !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ BASE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase ViewHolder ( LayoutInflater . from ( parent . context ). inflate ( layout Id , Ġparent , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ LOAD _ MORE _ VIEW Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase ViewHolder ( get Load More View ( parent ) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Delegate Manager . onCreate ViewHolder ( parent , Ġview Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbind ItemClickListener ( holder ) ĊĠĠĠĠĠĠĠ Ġreturn Ġholder ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠBase ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Type Ġ= Ġholder . item ViewType ĊĠĠĠĠĠĠĠ Ġval Ġdata Position Ġ= ĠgetData Position ( position ) ĊĠĠĠĠĠĠĠ Ġwhen ( view Type ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ HEADER _ VIEW , ĠTYPE _ EMPTY _ VIEW Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ LOAD _ MORE _ VIEW Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonLoad More Callback ( data Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Load More Helper ?. show ( holder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ BASE Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Item Animation ( holder . item View , Ġdata Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon BindView ( holder , Ġdatas [ data Position ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Item Animation ( holder . item View , Ġdata Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Delegate Manager . on Bind ViewHolder ( holder , Ġdatas [ data Position ], Ġdata Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Position Ġ= ĠgetData Position ( position ) ĊĠĠĠĠĠĠĠ Ġval Ġdatas Count Ġ= Ġdatas . size ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( position Ġ< Ġheader View Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ HEADER _ VIEW ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( empty View Count Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ EMPTY _ VIEW ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( data Position Ġ< Ġdatas Count ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġdatas [ data Position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Type Ġ= Ġadapter Delegate Manager . getItem ViewType ( item , Ġdata Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Type Ġ== ĠTYPE _ BASE Ġ&& Ġlayout Id Ġ== ĠLAY OUT _ INIT _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" No ĠI Multi Item Delegate Ġadded Ġthat Ġmatches Ġposition Ġ= Ġ$ position Ġin Ġdata Ġsource ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Type ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ LOAD _ MORE _ VIEW ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( datas . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty View Count Ġ+ Ġheader View Count ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatas . size Ġ+ Ġheader View Count Ġ+ Ġload More View Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind ItemClickListener ( holder : ĠBase ViewHolder ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġholder . adapter Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġval ĠitemView Ġ= Ġholder . item View ĊĠĠĠĠĠĠĠ ĠitemView . setOnClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon ItemClickListener ?. on Item Click ( this , Ġv , ĠgetData Position ( holder . layout Position )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠitemView . setOn Long ClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Long ClickListener ?. on Item Long Click ( this , Ġv , ĠgetData Position ( holder . layout Position )) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Load More View ( parent : ĠViewGroup ): ĠView ? { ĊĠĠĠĠĠĠĠ Ġinit Load More Helper () ĊĠĠĠĠĠĠĠ Ġm Load More Helper ?. update Load More View ( parent ) ĊĠĠĠĠĠĠĠ Ġval Ġload More View Ġ= Ġm Load More Helper ?. load More View ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġload More View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonLoad More Callback ( data Pos : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġif ( load More View Count Ġ< Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif ( data Pos Ġ< Ġdatas . size ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif ( m Load More Helper ?. cur Status Ġ== ĠLoad More Helper . STATUS _ LOADING _ COMPLETE Ġ&& Ġ! isLoading ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Load More Helper ?. cur Status Ġ= ĠLoad More Helper . STATUS _ LOADING ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonLoad More Listener ?. on Load More () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetData Position ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Position Ġ= Ġposition Ġ- Ġheader View Count ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( data Position Ġ< Ġ 0 ) Ġposition Ġelse Ġdata Position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Item Animation ( item View : ĠView , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isOpen Item Anim ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Always Item Anim ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Last Item Anim Position Ġ>= Ġposition ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Item Anim Position Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Item Anim Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Item Anim ?. apply Animation ( item View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Item Anim (@ Anim Type Ġanim Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isOpen Item Anim ) Ġreturn ĊĠĠĠĠĠĠĠ ĠisOpen Item Anim Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġchange Item Anim ( anim Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Load More Helper () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Load More Helper Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Load More Helper Ġ= ĠLoad More Helper () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Parent ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Parent Ġ= Ġview ?. parent ĊĠĠĠĠĠĠĠ Ġif Ġ( view Parent Ġis ĠViewGroup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Parent . remove View ( view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ item æ²¡æľī å¡« åħħ æ»¡ re cyclerView ï¼Į ç§»éĻ¤ æİī åĬłè½½ æĽ´å¤ļ è§ĨåĽ¾ ï¼Į éģ¿åħį è§¦åıĳ åĬłè½½ æĽ´å¤ļ éĢ»è¾ĳ ĊĠĠĠĠ Ġ* Ġps ï¼ļ è¿Ļä¸ª æĸ¹æ³ķ è¦ģ åľ¨ è®¾ç½® æķ°æį® æºĲ ä¹ĭåĲİ è°ĥçĶ¨ ï¼Į åĲ¦åĪĻ æĹł æķĪ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdisable Load More IfNot Fill ( re cyclerView : ĠRecyclerView ){ ĊĠĠĠĠĠĠĠ Ġis Load More Enable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= Ġre cyclerView . layout Manager ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġre cyclerView . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( layout Manager Ġis Ġandroidx . recyclerview . widget . Linear LayoutManager ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ( layout Manager . find Last Comp let ely Visible Item Position () Ġ+ Ġ 1 ) Ġ!= Ġitem Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġif ( layout Manager Ġis Ġandroidx . recyclerview . widget . St agger ed Grid LayoutManager ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost ions Ġ= ĠInt Array ( layout Manager . span Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager . find Last Comp let ely Visible Item Positions ( post ions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmax Pos Ġ= ĠInt . MIN _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( pos Ġin Ġpost ions ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( pos Ġ> Ġmax Pos ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Pos Ġ= Ġpos ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ( max Pos Ġ+ Ġ 1 ) Ġ!= Ġitem Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Load More Enable Ġ= Ġresult ĊĠĠĠĠĠĠĠ Ġ} Ġ, ĠDEL AY _ TIME ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® èĩªå®ļä¹ī çļĦ Load More View ĊĠĠĠĠ Ġ* Ġps ï¼ļ è¿Ļä¸ª æĸ¹æ³ķ è¦ģ åľ¨ è®¾ç½® éĢĤ éħį åĻ¨ ä¹ĭåĲİ è°ĥçĶ¨ ï¼Į åĲ¦åĪĻ æĹł æķĪ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Load More Provide ( load More View Provide : ĠI Load More View Provide ){ ĊĠĠĠĠĠĠĠ Ġinit Load More Helper () ĊĠĠĠĠĠĠĠ Ġm Load More Helper !!. update Load More Provide ( load More View Provide ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬłè½½ æĽ´å¤ļ å®ĮæĪĲ ï¼Į ä¸ĭ æ¬¡ æ»ĳ åĪ° åºķ éĥ¨ æĹ¶ è¿ĺ ä¼ļ è§¦åıĳ åĬłè½½ æĽ´å¤ļ éĢ»è¾ĳ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġloading Complete (){ ĊĠĠĠĠĠĠĠ Ġif ( load More View Count Ġ== Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Load More Helper ?. cur Status Ġ= ĠLoad More Helper . STATUS _ LOADING _ COMPLETE ĊĠĠĠĠĠĠĠ Ġnotify Item Changed ( load More View Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬłè½½ æĽ´å¤ļ ç»ĵæĿŁ ï¼Į ä¸ĭ æ¬¡ æ»ĳ åĪ° åºķ éĥ¨ æĹ¶ ä¸įä¼ļ è§¦åıĳ åĬłè½½ æĽ´å¤ļ éĢ»è¾ĳ ï¼Į ä½Ĩ ä¼ļ æĺ¾ç¤º loading End è§ĨåĽ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġloading End (){ ĊĠĠĠĠĠĠĠ Ġif ( load More View Count Ġ== Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Load More Helper ?. cur Status Ġ= ĠLoad More Helper . STATUS _ LOADING _ END ĊĠĠĠĠĠĠĠ Ġnotify Item Changed ( load More View Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬłè½½ æĽ´å¤ļ å¤±è´¥ ï¼Į ä¸ĭ æ¬¡ æ»ĳ åĪ° åºķ éĥ¨ æĹ¶ ä¸įä¼ļ è§¦åıĳ åĬłè½½ æĽ´å¤ļ éĢ»è¾ĳ ï¼Į ä½Ĩ ä¼ļ æĺ¾ç¤º loading Fail è§ĨåĽ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġloading Fail (){ ĊĠĠĠĠĠĠĠ Ġif ( load More View Count Ġ== Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Load More Helper ?. cur Status Ġ= ĠLoad More Helper . STATUS _ LOADING _ FAIL ĊĠĠĠĠĠĠĠ Ġnotify Item Changed ( load More View Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸įæĺ¯ åĲĮ ä¸Ģä¸ª å¼ķçĶ¨ , Ġæ¸ ħ ç©º åĪĹè¡¨ ï¼Į éĩįæĸ° è®¾ç½® æķ°æį® æºĲ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġreplace Datas ( datas : ĠMutable List < T > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( datas . isNull OrEmpty ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( datas Ġ!== Ġthis . datas ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . datas . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . datas . addAll ( datas ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġåľ¨ æķ°æį® æºĲ æľ« å°¾ æ·»åĬł å¾Īå¤ļ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Datas ( datas : ĠMutable List < T > ){ ĊĠĠĠĠĠĠĠ Ġthis . datas . addAll ( datas ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġåľ¨ æķ°æį® æºĲ æľ« å°¾ æ·»åĬł ä¸Ģä¸ª æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Data ( item : ĠT ){ ĊĠĠĠĠĠĠĠ Ġadd Data ( item , Ġdatas . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® ä½įç½® æ·»åĬł ä¸Ģä¸ª æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Data ( Ġitem : ĠT , Ġ@ Int Range ( from Ġ= Ġ 0 ) Ġpos Ġ: ĠInt ){ ĊĠĠĠĠĠĠĠ Ġdatas . add ( pos , Ġitem ) ĊĠĠĠĠĠĠĠ Ġnotify Item Inserted ( header View Count Ġ+ Ġpos ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® ä½įç½® æĽ´æĸ° ä¸Ģä¸ª æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsetData ( item : ĠT , Ġ@ Int Range ( from Ġ= Ġ 0 ) Ġpos : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġdatas [ pos ] Ġ= Ġitem ĊĠĠĠĠĠĠĠ Ġnotify Item Changed ( header View Count Ġ+ Ġpos ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® ä½įç½® ç§»éĻ¤ ä¸Ģä¸ª æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Data (@ Int Range ( from Ġ= Ġ 0 ) Ġpos : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġdatas . remove At ( pos ) ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( header View Count Ġ+ Ġpos ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç§»éĻ¤ ä¸Ģä¸ª æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Data ( item : ĠT ){ ĊĠĠĠĠĠĠĠ Ġdatas . remove ( item ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æīĵå¼Ģ åĬłè½½ item çļĦ åĬ¨çĶ» ï¼Į éĥ½æĺ¯ é»ĺè®¤ åĢ¼ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen Item Anim () Ġ{ ĊĠĠĠĠĠĠĠ Ġopen Item Anim ( ANIM _ SL IDE _ FROM _ LEFT ) ĊĠĠĠĠĠĠĠ Ġis Always Item Anim Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æīĵå¼Ģ åĬłè½½ item çļĦ åĬ¨çĶ» ï¼Į åĬ¨çĶ» é»ĺè®¤ ĊĠĠĠĠ Ġ* Ġ@ param Ġis Always Ġæĺ¯åĲ¦ æ¯ıæ¬¡ éĥ½ åĬłè½½ item åĬ¨çĶ» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen Item Anim ( is Always : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġopen Item Anim ( ANIM _ SL IDE _ FROM _ LEFT ) ĊĠĠĠĠĠĠĠ Ġis Always Item Anim Ġ= Ġis Always ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åħ³éĹŃ åĬłè½½ item çļĦ åĬ¨çĶ» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclose Item Anim () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isOpen Item Anim ) Ġreturn ĊĠĠĠĠĠĠĠ ĠisOpen Item Anim Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġis Always Item Anim Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Item Anim Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® åĨħ ç½® anim çļĦ ç±»åŀĭ æĶ¹åıĺ åĬłè½½ item çļĦ åĬ¨çĶ» ĊĠĠĠĠ Ġ* Ġ@ param Ġanim Type Ġ åĨħ ç½® anim çļĦ ç±»åŀĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġchange Item Anim (@ Anim Type Ġanim Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( anim Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAN IM _ ALPHA Ġ-> Ġm Item Anim Ġ= ĠAlpha Anim () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAN IM _ SCALE Ġ-> Ġm Item Anim Ġ= ĠScale Anim () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAN IM _ SL IDE _ FROM _ LEFT Ġ-> Ġm Item Anim Ġ= ĠSlide Form Left Anim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġm Item Anim Ġ= ĠSlide Form Left Anim () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® ç»Ļ å®ļçļĦ åĬ¨çĶ» æĶ¹åıĺ åĬłè½½ item çļĦ åĬ¨çĶ» ĊĠĠĠĠ Ġ* Ġ@ param Ġanim Ġ ç»§æī¿ èĩª I Anim çļĦ åĬ¨çĶ» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġchange Item Anim ( anim : ĠI Anim ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Item Anim Ġ= Ġanim ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł ä¸Ģä¸ª ç©º å¸ĥå±Ģ è§ĨåĽ¾ ĊĠĠĠĠ Ġ* Ġ@ param Ġempty View Ġempty View ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Empty View ( empty View : ĠView ){ ĊĠĠĠĠĠĠĠ Ġif ( m Empty View Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Empty View Ġ= ĠFrame Layout ( empty View . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= ĠRecyclerView . LayoutParams ( RecyclerView . LayoutParams . MATCH _ PARENT , ĠRecyclerView . LayoutParams . MATCH _ PARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġempty View Params Ġ= Ġempty View . layout Params ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( empty View Params Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . width Ġ= Ġempty View Params . width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġempty View Params . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Empty View ?. layout Params Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Empty View ?. removeAll Views () ĊĠĠĠĠĠĠĠ Ġm Empty View ?. addView ( empty View ) ĊĠĠĠĠĠĠĠ Ġremove Parent ( m Empty View ) ĊĠĠĠĠĠĠĠ Ġis Use Empty View Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif ( empty View Count Ġ!= Ġ 0 ) Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł ä¸Ģä¸ª Header View ï¼Į åı¯ éĩįå¤į æ·»åĬł ĊĠĠĠĠ Ġ* Ġ@ param Ġheader View ĠHeader View ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Header View ( header View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . add Header View ( header View , Ġ- 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® index æ·»åĬł ä¸Ģä¸ª Header View ĊĠĠĠĠ Ġ* Ġ@ param Ġheader View ĠHeader View ĊĠĠĠĠ Ġ* Ġ@ param Ġindex ĠHeader View åľ¨ å¸ĥå±Ģ ä¸ŃçļĦ ä½įç½® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Header View ( header View : ĠView , Ġindex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpos Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġif Ġ( m Header View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Header View Ġ= ĠLinearLayout ( header View . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠViewGroup . LayoutParams ( ViewGroup . LayoutParams . MATCH _ PARENT , ĠViewGroup . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Header View ?. layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Header View ?. orientation Ġ= ĠLinearLayout . VERTICAL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġm Header View !!. child Count ĊĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ< Ġ 0 Ġ|| Ġpos Ġ> Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpos Ġ= Ġchild Count ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Header View ?. addView ( header View , Ġpos ) ĊĠĠĠĠĠĠĠ Ġremove Parent ( m Header View ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Header View ?. child Count Ġ== Ġ 1 ) Ġnotify Item Inserted ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç§»éĻ¤ ä¸Ģä¸ª Header View ĊĠĠĠĠ Ġ* Ġ@ param Ġheader View Ġ ä½ł è¦ģ ç§»éĻ¤ çļĦ header View ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Header View ( header View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( header View Count Ġ< Ġ 1 ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġm Header View !!. indexOf Child ( header View ) ĊĠĠĠĠĠĠĠ Ġremove Header View ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç§»éĻ¤ ä¸Ģä¸ª Header View ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġ ä½ł è¦ģ ç§»éĻ¤ çļĦ header View çļĦ ç´¢å¼ķ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Header View ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( header View Count Ġ< Ġ 1 Ġ|| Ġindex Ġ< Ġ 0 Ġ|| Ġindex Ġ> Ġm Header View !!. child Count ) Ġreturn ĊĠĠĠĠĠĠĠ Ġm Header View ?. remove View At ( index ) ĊĠĠĠĠĠĠĠ Ġif Ġ( header View Count Ġ< Ġ 1 ) Ġnotify Item Removed ( 0 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç§»éĻ¤ æķ´ä¸ª Header View ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Header View () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( header View Count Ġ< Ġ 1 ) Ġreturn ĊĠĠĠĠĠĠĠ Ġm Header View ?. removeAll Views () ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł item çļĦ Adapter Deleg te ï¼Į é»ĺè®¤ view Type ĊĠĠĠĠ Ġ* Ġ@ param Ġdelegate Ġitem çļĦ Adapter Deleg te ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Item Delegate ( delegate : ĠI Multi Item Delegate < T >): ĠBase Adapter < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter Delegate Manager . add Delegate ( delegate ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® ç»Ļ å®ļçļĦ å¸¦ view Type æ·»åĬł item çļĦ Adapter Deleg te ĊĠĠĠĠ Ġ* Ġ@ param Ġview Type Ġitem çļĦ ç±»åŀĭ ĊĠĠĠĠ Ġ* Ġ@ param Ġdelegate Ġitem çļĦ Adapter Deleg te ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Item Delegate ( view Type : ĠInt , Ġdelegate : ĠI Multi Item Delegate < T >): ĠBase Adapter < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter Delegate Manager . add Delegate ( view Type , Ġdelegate ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬłè½½ æĽ´å¤ļ åĽŀè°ĥ çĽĳåĲ¬ æİ¥åı£ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠOn Load More Listener { ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åĬłè½½ æĽ´å¤ļ åĽŀè°ĥ æĸ¹æ³ķ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠonLoad More () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġitem åįķ åĩ» äºĭä»¶ çĽĳåĲ¬ æİ¥åı£ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠOn ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġitem åįķ åĩ» äºĭä»¶ çĽĳåĲ¬ æİ¥åı£ åĽŀè°ĥ æĸ¹æ³ķ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġadapter Ġ éĢĤ éħį åĻ¨ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview Ġposition å¯¹åºĶçļĦ item View ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġposition ĠitemView åľ¨ æºĲ æķ°æį® ä¸ŃçļĦ ç´¢å¼ķ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Click ( adapter : ĠBase Adapter < *> ?, Ġview : ĠView , Ġposition : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġitem éķ¿ æĮī äºĭä»¶ çĽĳåĲ¬ æİ¥åı£ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠOn Item Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġitem éķ¿ æĮī äºĭä»¶ çĽĳåĲ¬ æİ¥åı£ åĽŀè°ĥ æĸ¹æ³ķ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġadapter Ġ éĢĤ éħį åĻ¨ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview Ġposition å¯¹åºĶçļĦ item View ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġposition ĠitemView åľ¨ æºĲ æķ°æį® ä¸ŃçļĦ ç´¢å¼ķ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġtrue è¡¨ç¤º item View æ¶Īè´¹ è¿Ļä¸ª éķ¿ æĮī äºĭä»¶ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Long Click ( adapter : ĠBase Adapter < *> ?, Ġview : ĠView , Ġposition : ĠInt ): ĠBoolean ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġitem çļĦ åŃĲ æİ§ä»¶ çļĦ åįķ åĩ» æİ¥åı£ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠOn Item Child ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġitem çļĦ åŃĲ æİ§ä»¶ çļĦ åįķ åĩ» æİ¥åı£ åĽŀè°ĥ æĸ¹æ³ķ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġadapter Ġ éĢĤ éħį åĻ¨ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview Ġposition å¯¹åºĶçļĦ item çļĦ åŃĲ æİ§ä»¶ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġposition ĠitemView åľ¨ æºĲ æķ°æį® ä¸ŃçļĦ ç´¢å¼ķ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Child ClickListener ( adapter : ĠBase Adapter < *> ?, Ġview : ĠView , Ġposition : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġitem çļĦ åŃĲ æİ§ä»¶ çļĦ éķ¿ æĮī æİ¥åı£ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠOn Item Child Long Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġitem çļĦ åŃĲ æİ§ä»¶ çļĦ éķ¿ æĮī æİ¥åı£ åĽŀè°ĥ æĸ¹æ³ķ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġadapter Ġ éĢĤ éħį åĻ¨ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġview Ġposition å¯¹åºĶçļĦ item çļĦ åŃĲ æİ§ä»¶ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġposition ĠitemView åľ¨ æºĲ æķ°æį® ä¸ŃçļĦ ç´¢å¼ķ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġtrue è¡¨ç¤º item çļĦ åŃĲ æİ§ä»¶ æ¶Īè´¹ è¿Ļä¸ª éķ¿ æĮī äºĭä»¶ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Child Long Listener ( adapter : ĠBase Adapter < *> ?, Ġview : ĠView , Ġposition : ĠInt ): ĠBoolean ĊĠĠĠ Ġ} Ċ } Ċ