package Ġcom . ly l . bo on . ui . base . fragment Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . widget . Swipe Refresh Layout Ċ import Ġandroid . support . v 7 . widget . Grid LayoutManager Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . support . v 7 . widget . St agger ed Grid LayoutManager Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . ly l . bo on . R Ċ import Ġcom . ly l . bo on . ui . base . Base Fragment Ċ import Ġcom . ly l . bo on . ui . base . ap d ter . My Base Adapter Ċ import Ġcom . ly l . bo on . view . recycler . On Re cycle View Scroll Listener Ċ import Ġcom . wang . avi . AV Loading Indicator View Ċ import Ġk ot ter knife . bind View Ċ import Ġrx . Observer Ċ Ċ /** Ċ Ġ* ĠW ing _ Li Ċ Ġ* Ġ 2 0 1 8 / 2 / 1 0 . Ċ Ġ*/ Ċ abstract Ġclass ĠBase Recycler Fragment < T > Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġval Ġm RecyclerView : ĠRecyclerView Ġby Ġbind View ( R . id . m RecyclerView ) ĊĠĠĠ Ġval Ġm Swipe Refresh Layout : ĠSw ipe Refresh Layout Ġby Ġbind View ( R . id . m Swipe Refresh Layout ) ĊĠĠĠ Ġval Ġm Loading View : ĠAV Loading Indicator View Ġby Ġbind View ( R . id . loading View ) ĊĊĠĠĠ Ġprotected Ġvar Ġm Data : ĠList < T >? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġm Adapter : ĠMy Base Adapter < T >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm LayoutManager : ĠRecyclerView . LayoutManager ĊĠĠĠ Ġprotected Ġvar Ġm ListType : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprotected Ġvar Ġpage Ġ= Ġ 1 ĊĠĠĠ Ġprotected Ġvar ĠisLoading Ġ= Ġfalse ĊĊĠĠĠ Ġpublic Ġoverride Ġval Ġlayout Resource : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠR . layout . fragment _ list ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç½ĳç»ľ è¯·æ±Ĥ æĪĲåĬŁ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġobserver Ġ= Ġobject Ġ: ĠObserver < List < T >> Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completed () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Holder (). show Toast ( R . string . msg _ net _ erro ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Loading View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Load () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( data Entities : ĠList < T > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Loading View () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Entities Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter !!. addAll ( data Entities ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Load () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit Data () ĊĠĠĠĠĠĠĠ Ġinit ListType () ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġload More () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġstop Load () ĊĠĠĠĠĠĠĠ Ġstop Loading View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åĪĹè¡¨ çļĦ æĺ¾ç¤º æĸ¹å¼ı ĊĠĠĠĠ Ġ* Ġè®¾ç½® Ġæ » ĳ åĬ¨ ãĢģ åĪ·æĸ° ãĢģ çĤ¹åĩ» Ġ äºĭä»¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// å¿ħé¡» åľ¨ åŃĲ é¡µéĿ¢ new Ġ åĩº åĪĹè¡¨ çļĦ Adapter ĊĠĠĠĠĠĠĠ Ġif Ġ( m Adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( R . string . load _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( m ListType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ LIST // åĪĹè¡¨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġm LayoutManager Ġ= ĠLinearLayoutManager ( get Holder (), ĠLinearLayoutManager . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ GRID // ç½ĳ æł¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġm LayoutManager Ġ= ĠGrid LayoutManager ( get Holder (), ĠGR ID _ COUNT ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ ST AG _ V // ç« ĸ åĲĳ ç Ģ ĳ å¸ĥ æµģ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġm LayoutManager Ġ= ĠSt agger ed Grid LayoutManager ( GRID _ COUNT , ĠSt agger ed Grid LayoutManager . VERTICAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ ST AG _ H // æ¨ ª åĲĳ ç Ģ ĳ å¸ĥ æµģ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġm LayoutManager Ġ= ĠSt agger ed Grid LayoutManager ( GRID _ COUNT , ĠSt agger ed Grid LayoutManager . HORIZONTAL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm RecyclerView . layout Manager Ġ= Ġm LayoutManager ĊĠĠĠĠĠĠĠ Ġm RecyclerView . adapter Ġ= Ġm Adapter ĊĊĠĠĠĠĠĠĠ Ġm RecyclerView . add On Scroll Listener ( object Ġ: ĠOn Re cycle View Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad More () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload More () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġm Swipe Refresh Layout . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter !!. clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload More () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Adapter !!. setOn ItemClickListener Ġ{ ĠitemView , Ġview Type , Ġposition Ġ-> ĠItem ClickListener ( item View , Ġview Type , Ġposition ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬłè½½ æĽ´å¤ļ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġload More () Ġ{ ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset Refresh ing ( true ) ĊĠĠĠĠĠĠĠ Ġunsubscribe () ĊĠĠĠĠĠĠĠ Ġset Subscribe ( observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åģľæŃ¢ åĬłè½½ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstop Load () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Swipe Refresh Layout . is Refresh ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Swipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åģľæŃ¢ åĬłè½½ åĬ¨çĶ» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstop Loading View () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Loading View . is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Loading View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Loading View . parent Ġas ĠViewGroup ). remove View ( m Loading View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĺ¾ç¤º åĪ· æĸ°çļĦ è¿Ľ åº¦ åľ Ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġset Refresh ing ( b : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Swipe Refresh Layout . is Refresh ing Ġ= Ġb ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® è®¢ éĺħ çļĦ Ġ åıĳå¸ĥ äºĭä»¶ ï¼Į observer åľ¨ çĪ¶ ç±» å·²ç»ı åĨĻ å¥½ , å¦Ĥæŀľ éľĢè¦ģ åģļ çī¹æ®Ĭ å¤ĦçĲĨ ï¼Į åĪĻ éĩį åĨĻ ä¸Ģä¸ª ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġset Subscribe ( observer : ĠObserver <* >) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åĪĹè¡¨ çļĦ ç±»åŀĭ ĊĠĠĠĠ Ġ* Ġ ç»Ļ Ġm ListType Ġ èµĭåĢ¼ ä»¥ä¸ĭ ç±»åŀĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠBase Recycler Fragment . TYPE _ LIST Ġ åĪĹè¡¨ ï¼Ľ > ĊĠĠĠĠ Ġ* ĠBase Recycler Fragment . TYPE _ GRID Ġ ç½ĳ æł¼ ï¼Ľ > ĊĠĠĠĠ Ġ* ĠBase Recycler Fragment . TYPE _ ST AG _ V Ġ ç« ĸ åĲĳ ç Ģ ĳ å¸ĥ æµģ ï¼Ľ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġinit ListType () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ Ġm Data ĠåĴĮ Ġm Ad aper ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġm Data Ġæĺ¯ ĠList < T > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġm Ad aper Ġ å¿ħé¡» ç»§æī¿ ĠMy Base Adapter ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġinit Data () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĤ¹åĩ» äºĭä»¶ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠitemView Ġå½ĵåīį çļĦ ĠItem ĊĠĠĠĠ Ġ* Ġ@ param Ġview Type Ġå½ĵ æľī å¤ļ ç§į ĠItem ĠæĹ¶ ï¼Į å½ĵåīį çļĦ ç±»åŀĭ ĊĠĠĠĠ Ġ* Ġ@ param Ġposition Ġ ç¬¬ åĩłä¸ª ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun ĠItem ClickListener ( item View : ĠView , Ġview Type : ĠInt , Ġposition : ĠInt ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠTYPE _ LIST Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval ĠTYPE _ GRID Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval ĠTYPE _ ST AG _ V Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval ĠTYPE _ ST AG _ H Ġ= Ġ 3 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ç½ĳ æł¼ åĪĹè¡¨ çļĦ åĪĹ æķ° ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠGR ID _ COUNT Ġ= Ġ 2 ĊĠĠĠ Ġ} Ċ } Ċ