package Ġcom . qf . g ank . ui . home Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . qf . g ank . R Ċ import Ġcom . qf . g ank . bean . banner . Banner Bean Ċ import Ġcom . qf . g ank . bean . category . Category Bean Ċ import Ġcom . qf . g ank . ui . base . Base Vm Fragment Ċ import Ġcom . qf . g ank . ui . home . banner . Banner Adapter Ċ import Ġcom . qf . g ank . ui . home . banner . Banner ViewHolder Ċ import Ġcom . qf . g ank . utils . Log Utils Ċ import Ġcom . qf . g ank . widget . ViewPager 2 Delegate Ċ import Ġcom . zh pan . banner view . Banner ViewPager Ċ import Ġkotlinx . android . synt hetic . main . fragment _ home .* Ċ Ċ /** Ċ Ġ* Ġä½ľèĢħ ï¼ļ P eter Wu Ċ Ġ* Ġ æĹ¶éĹ´ ï¼ļ 2 0 2 0 / 7 / 1 1 Ċ Ġ* Ġæı ı è¿° ï¼ļ Home Fragment Ċ Ġ*/ Ċ class ĠHome Fragment Ġ: ĠBase Vm Fragment < Home Fg ViewModel >() Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Banner ViewPager : ĠBanner ViewPager < Banner Bean , ĠBanner ViewHolder > ĊĠĠĠ Ġprivate Ġval Ġm Fragment List Ġby Ġlazy Ġ{ Ġarray ListOf < Fragment >() Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠviewModel Class () Ġ= ĠHome Fg ViewModel :: class . java ĊĊĠĠĠ Ġoverride Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Banner ViewPager () ĊĠĠĠĠĠĠĠ Ġinit Refresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Refresh Header . setColor Scheme Colors ( Context Compat . getColor ( require Context (), ĠR . color . color Primary )) ĊĠĠĠĠĠĠĠ Ġm Swipe Refresh Layout . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Enable Over Scroll Bo unce ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Share ViewModel ()?. is Refresh Article ?. post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Tab ( beans : ĠList < Category Bean >) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Fragment List . clear () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġbe ans . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠHome Page Fragment . newInstance ( beans [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Fragment List . add ( fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( require Context ()). inflate ( R . layout . tab _ category , Ġnull ) Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . text Ġ= Ġbe ans [ i ]. title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Dsl Tab Layout . addView ( view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm ViewPager . adapter Ġ= ĠHome Page Adapter ( require Activity (), Ġm Fragment List ) ĊĠĠĠĠĠĠĠ Ġ// Ġ åĬł äºĨ ä¸ĭéĿ¢ è¿Ļ åı¥ ï¼Į ä¼ļ ä¸Ģæ¬¡ èµ° å®Į fragment çļĦ on View Created ï¼Į èĢĮ å¦Ĥæŀľ ä½¿çĶ¨ init Data çļĦè¯Ŀ ï¼Į å°± çĽ¸ å½ĵ äºİ æ²¡æľī äºĨ æ ĩĴ åĬłè½½ ĊĠĠĠĠĠĠĠ Ġ// Ġä¼ļ èµ° å®Į æīĢæľī fragment çļĦ init Data ï¼Į æīĢä»¥ åĬł äºĨ ä¸ĭéĿ¢ è¿Ļ åı¥ å°± ä½¿çĶ¨ lazy Load Data æĿ¥ å®ŀçİ° æ ĩĴ åĬłè½½ ãĢĤ ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ ä¸į åĬł ä¸ĭéĿ¢ è¿Ļ åı¥ ï¼Į é»ĺè®¤ å°±æĺ¯ æ ĩĴ åĬłè½½ ï¼Į ä½¿çĶ¨ init Data æĪĸèĢħ lazy Load Data éĥ½ åı¯ä»¥ ãĢĤ ĊĠĠĠĠĠĠĠ Ġ// Ġ ä¹ĭ æīĢä»¥ æĪĳ è¦ģ åĬł ä¸ĭéĿ¢ è¿Ļ åı¥ ï¼Į æĺ¯ åĽłä¸º æĪĳ è¦ģ å®ŀçİ° ä¸ĭ æĭī åĪ·æĸ° ï¼Į å½ĵ æĪĳ ä»İ ç¬¬ä¸Ģä¸ª fragment ä¾Ŀ æ¬¡ æ»ĳ åĪ° æľĢåĲİ ä¸Ģä¸ª fragment ï¼Į åĨį ä»İ æľĢåĲİ ä¸Ģä¸ª ä¾Ŀ æ¬¡ æ»ĳ åĪ° ĊĠĠĠĠĠĠĠ Ġ// Ġ ç¬¬ä¸Ģä¸ª çļĦæĹ¶åĢĻ å¼ĢåĲ¯ åĪ·æĸ° ï¼Į æŃ¤ æĹ¶ m Is Can Refresh ä¸º false ï¼Į ä½Ĩ ç¡® å®ŀ èµ° äºĨ on Resume æĸ¹æ³ķ ï¼Į èĢĮ åĬł äºĨ ä¸ĭéĿ¢ è¿Ļ åı¥ å°± è§£åĨ³ äºĨ ï¼Į Ġæ ļ Ĥ ä¸į çŁ¥ ä¸º åĺ Ľ ãĢĤ ĊĠĠĠĠĠĠĠ Ġ// Ġæľī å¾ħ èĢĥ ç©¶ ï¼ģï¼ģ ï¼ģ ĊĠĠĠĠĠĠĠ Ġm ViewPager . off screen Page Limit Ġ= Ġm Fragment List . count () ĊĠĠĠĠĠĠĠ Ġm Dsl Tab Layout . setup ViewPager ( ViewPager 2 Delegate ( m ViewPager , Ġm Dsl Tab Layout )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Banner ViewPager () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Banner ViewPager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire View (). findViewById < Banner ViewPager < Banner Bean , ĠBanner ViewHolder >>( R . id . m Banner ViewPager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠBanner Adapter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Indicator Slider Gap ( resources . get Dimension Pixel Offset ( R . dim en . dp _ 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Indicator Margin ( 0 , Ġ 0 , Ġ 1 5 , Ġ 1 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Page Margin ( 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Indicator Slider Radius ( 1 0 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Indicator Height ( 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Indicator Slider Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( require Context (), ĠR . color . banner _ indicator ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( require Context (), ĠR . color . white ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On Page ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . info (" current Ġbanner Ġis Ġ---> Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Home Data () ĊĠĠĠĠĠĠĠ Ġget Share ViewModel ()?. is Refresh Article ?. observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . not ()) Ġm Swipe Refresh Layout . finish Refresh () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Home Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġm ViewModel . get Banner () ĊĠĠĠĠĠĠĠ Ġm ViewModel . get Category () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . observe () ĊĠĠĠĠĠĠĠ Ġm ViewModel . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Banner LiveData . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Swipe Refresh Layout . finish Refresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Banner ViewPager . refresh Data ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Category LiveData . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Swipe Refresh Layout . finish Refresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Tab ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . info (" get Ġcategory Ġ---> Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Id () Ġ= ĠR . layout . fragment _ home Ċ }