package Ġcn . cq aut ot est . sun ny be ach . ui . fragment . home Ċ Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcn . cq aut ot est . sun ny be ach . R Ċ import Ġcn . cq aut ot est . sun ny be ach . action . Status Action Ċ import Ġcn . cq aut ot est . sun ny be ach . app . App Activity Ċ import Ġcn . cq aut ot est . sun ny be ach . app . App Fragment Ċ import Ġcn . cq aut ot est . sun ny be ach . databinding . Article List Fragment Binding Ċ import Ġcn . cq aut ot est . sun ny be ach . ui . activity . Article Detail Activity Ċ import Ġcn . cq aut ot est . sun ny be ach . ui . activity . Image Preview Activity Ċ import Ġcn . cq aut ot est . sun ny be ach . ui . adapter . Article Adapter Ċ import Ġcn . cq aut ot est . sun ny be ach . util .* Ċ import Ġcn . cq aut ot est . sun ny be ach . view model . home . Home ViewModel Ċ import Ġcn . cq aut ot est . sun ny be ach . widget . Status Layout Ċ import Ġcom . blank j . util code . util . Network Utils Ċ import Ġcom . ch ad . library . adapter . base . module . Base Load More Module Ċ import Ġcom . sc wang . smart . refresh . layout . Smart Refresh Layout Ċ Ċ /** Ċ Ġ* Ġauthor Ġ: ĠA ĠL on ely ĠCat Ċ Ġ* Ġgithub Ġ: Ġhttps :// github . com / an ji emo / Sun ny Be ach Ċ Ġ* Ġtime ĠĠ Ġ: Ġ 2 0 2 1 / 6 / 2 0 Ċ Ġ* Ġdesc ĠĠ Ġ: Ġ æĸĩç«ł åĪĹè¡¨ ĠFragment Ċ Ġ*/ Ċ class ĠArticle List Fragment Ġ: ĠApp Fragment < App Activity >(), ĠStatus Action Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠArticle List Fragment Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġm Binding Ġget () Ġ= Ġ_ binding !! ĊĠĠĠ Ġprivate Ġval Ġarticle Adapter Ġby Ġlazy Ġ{ ĠArticle Adapter () Ġ} ĊĠĠĠ Ġprivate Ġvar Ġ_ home ViewModel : ĠHome ViewModel ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġm Home ViewModel Ġget () Ġ= Ġ_ home ViewModel !! ĊĊĠĠĠ Ġvar Ġtitle : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġcategory Id : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Id (): ĠInt Ġ= ĠR . layout . article _ list _ fragment ĊĊĠĠĠ Ġoverride Ġfun Ġon Binding View () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠArticle List Fragment Binding . bind ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrefresh Layout Ġ= Ġm Binding . rl Status Refresh ĊĠĠĠĠĠĠĠ Ġval Ġload More Module Ġ= Ġarticle Adapter . load More Module ĊĠĠĠĠĠĠĠ Ġif Ġ( is Recommend Type ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Home ViewModel . recommend List . observe ( view Lifecycle Owner ) Ġ{ Ġrecommend List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġrecommend List ?. list Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle Adapter . addData ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Complete ( refresh Layout , Ġload More Module ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Home ViewModel . categories Map . observe ( view Lifecycle Owner ) Ġ{ Ġarticle Map Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġarticle Map ?. get ( categoryId ) Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle Adapter . addData ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Complete ( refresh Layout , Ġload More Module ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Event () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrefresh Layout Ġ= Ġm Binding . rl Status Refresh ĊĠĠĠĠĠĠĠ Ġval Ġload More Module Ġ= Ġarticle Adapter . load More Module ĊĠĠĠĠĠĠĠ Ġrefresh Layout . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Utils . is Available Async Ġ{ Ġavailable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( available . not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĹł ç½ĳç»ľ æĹ¶ æĺ¾ç¤º çļĦ çĬ¶æĢģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Ġ{ Ġrefresh Article Data () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . finish Refresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ is Available Async ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Article Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġä¸ĭ æĭī åĪ·æĸ° çļĦæĹ¶åĢĻ ç¦ģ çĶ¨ ä¸Ĭ æĭī åĬłè½½ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload More Module . is Enable Load More Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æĸĩç«ł åĪĹè¡¨ é¡¹ çļĦ çĤ¹åĩ» äºĭä»¶ ĊĠĠĠĠĠĠĠ Ġarticle Adapter . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarticle Item Ġ= Ġarticle Adapter . getItem ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArticle Detail Activity . start ( require Context (), Ġarticle Item . id , Ġarticle Item . title ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġarticle Adapter . addChild Click View Ids ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . iv _ avatar , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . article _ cover _ one , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . article _ cover _ two , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . article _ cover _ there , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġarticle Adapter . setOn Item Child ClickListener Ġ{ Ġ_, Ġview , Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view . id Ġ== ĠR . id . iv _ avatar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarticle Item Ġ= Ġarticle Adapter . getItem ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Preview Activity . start ( require Context (), Ġarticle Item . avatar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view . id Ġ== ĠR . id . article _ cover _ one ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġview . id Ġ== ĠR . id . article _ cover _ two ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġview . id Ġ== ĠR . id . article _ cover _ there ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarticle Item Ġ= Ġarticle Adapter . getItem ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Preview Activity . start ( require Context (), Ġarticle Item . covers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġload More Module . setOn Load More Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload More Module . is Enable Load More Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload More Article Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪ·æĸ° ç»ĵæĿŁ ï¼Į ç»Łä¸Ģ å¤ĦçĲĨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrefresh Complete ( ĊĠĠĠĠĠĠĠ Ġrefresh Layout : ĠSmart Refresh Layout , ĊĠĠĠĠĠĠĠ Ġload More Module : ĠBase Load More Module ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ åĪ·æĸ° ç»ĵæĿŁ ĊĠĠĠĠĠĠĠ Ġrefresh Layout . finish Refresh () ĊĠĠĠĠĠĠĠ Ġ// Ġ æĺ¾ç¤º åĬłè½½ å®ĮæĪĲ çĬ¶æĢģ ĊĠĠĠĠĠĠĠ Ġload More Module . load More Complete () ĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ éĢĤ éħį åĻ¨ éĩĮ çļĦæķ°æį® ï¼Į åĽłä¸º è¿ĻéĩĮ éĿ¢ çļĦæķ°æį® æīį æĺ¯ è¯¥ åĪĨç±» ä¸ĭçļĦ åħ¨éĥ¨ åĪĹè¡¨ æķ°æį® ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġarticle Adapter . data ĊĠĠĠĠĠĠĠ Ġ// ĠåĪ¤æĸŃ åĪĹè¡¨ æĺ¾ç¤º çļĦæķ°æį® æĺ¯åĲ¦ ä¸ºç©º ĊĠĠĠĠĠĠĠ Ġif Ġ( data . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĺ¾ç¤º ç©º æıĲç¤º ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Empty () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĺ¾ç¤º åĬłè½½ å®ĮæĪĲ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Complete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ åĲ¯çĶ¨ ä¸ĭ æĭī åĪ·æĸ° ĊĠĠĠĠĠĠĠ Ġload More Module . is Enable Load More Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬłè½½ æĽ´å¤ļ æĸĩç«ł åĪĹè¡¨ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġload More Article Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Recommend Type ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Home ViewModel . load More Recommend Content () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Home ViewModel . load More Article ListBy CategoryId ( categoryId Ġ= Ġcategory Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪ·æĸ° æĸĩç«ł åĪĹè¡¨ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrefresh Article Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġæ¸ ħ ç©º åİŁ æĿ¥ çļĦæķ°æį® ĊĠĠĠĠĠĠĠ Ġarticle Adapter . set List ( array ListOf ()) ĊĠĠĠĠĠĠĠ ĠNetwork Utils . is Available Async Ġ{ Ġis Available Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Available . not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Article Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Recommend Type ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Home ViewModel . refresh Recommend Content () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Home ViewModel . refresh Article ListBy CategoryId ( categoryId Ġ= Ġcategory Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ home ViewModel Ġ= ĠViewModel Provider ( this )[ Home ViewModel :: class . java ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Recommend Type ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarticle Adapter . add Header View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . home _ discover _ more _ author _ content , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Binding . rv Article List . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġarticle Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( object Ġ: ĠRecyclerView . Item Decoration () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åįķä½į éĹ´ è·Ŀ ï¼Ī å®ŀéĻħ éĹ´ è·Ŀ çļĦä¸Ģ åįĬ ï¼ī ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġunit Ġ= Ġ 4 . dp ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Offsets ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Rect : ĠRect , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠRecyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . getItem Offsets ( out Rect , Ġview , Ġparent , Ġstate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequ ilib rium Assignment Of Linear ( unit , Ġout Rect , Ġview , Ġparent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Round Rect Bg ( corner Radius Ġ= Ġ 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment Resume ( first : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Fragment Resume ( first ) ĊĠĠĠĠĠĠĠ Ġif Ġ( first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åıªæľī ç¬¬ ä¸Ģæ¬¡ åı¯ è§ģ çļĦæĹ¶åĢĻ æīį åĬłè½½ æķ°æį® ï¼Į æ ĩĴ åĬłè½½ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Article Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog By Debug ( msg Ġ= Ġ" init Data ï¼ļ == => Ġ$ title ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Recommend Type () Ġ= Ġ"" Ġ== Ġcategory Id ĊĊĠĠĠ Ġoverride Ġfun ĠgetStatus Layout (): ĠStatus Layout Ġ= Ġm Binding . hl Article List Hint ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ_ home ViewModel Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠArticle List Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArticle List Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }