package Ġcom . mad re ain . lib h ulk . components . view . list Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . blank j . util code . util . Convert Utils Ċ import Ġcom . ch ad . library . adapter . base . Base Quick Adapter Ċ import Ġcom . ch ad . library . adapter . base . view holder . Base ViewHolder Ċ import Ġcom . mad re ain . lib h ulk . R Ċ import Ġcom . sc wang . smart . refresh . layout . Smart Refresh Layout Ċ import Ġcom . sc wang . smart . refresh . layout . api . Refresh Layout Ċ import Ġcom . sc wang . smart . refresh . layout . listener . On Refresh Load More Listener Ċ import Ġkotlinx . android . synt hetic . main . common _ view _ list . view .* Ċ Ċ open Ġclass ĠListView ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: ĠFrame Layout ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġvar Ġrequest Page Num : ĠLong Ġ= Ġ 0 ĊĊĊĠĠĠ Ġlateinit Ġvar Ġempty View : ĠView ĊĊĠĠĠ Ġlateinit Ġvar Ġre cyclerView : ĠRecyclerView ĊĠĠĠ Ġlateinit Ġvar Ġrefresh Layout : ĠSmart Refresh Layout ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrefresh Footer : ĠList Footer ĊĊĠĠĠ Ġvar Ġhas More : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġfun Ġinit Empty () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġempty View Ġ= ĠLayoutInflater . from ( context ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . common _ view _ empty _ page , Ġthis , Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= ĠLayout Params ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġempty View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġrefresh Empty . addView ( empty View , Ġlayout Params ) ĊĠĠĠĠĠĠĠ Ġthis . empty View Ġ= Ġempty View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent View Ġ= ĠLayoutInflater . from ( context ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . common _ view _ list , Ġthis , Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġre cyclerView Ġ= Ġcontent View . re cyclerView ĊĠĠĠĠĠĠĠ Ġrefresh Layout Ġ= Ġcontent View . smart Refresh Layout ĊĠĠĠĠĠĠĠ Ġrefresh Footer Ġ= Ġcontent View . refresh Footer ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġrefresh Layout . setOn Refresh Load More Listener ( object Ġ: ĠOn Refresh Load More Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad More ( m refresh Layout : ĠRefresh Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Data Load ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ( request Page Num , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Refresh ( refresh Layout : ĠRefresh Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Data Load ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Page Num Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ( request Page Num , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= ĠLayout Params ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġadd View ( content View , Ġlayout Params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Refresh () ĊĠĠĠĠĠĠĠ Ġinit Empty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠRecyclerView . ViewHolder > Ġset Adapter ( adapter : ĠRecyclerView . Adapter < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġon Data Load : Ġ(( page : ĠLong , Ġis First : ĠBoolean ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĊĠĠĠ Ġfun Ġset On Data Load Listener ( on Data Load : Ġ( page : ĠLong , Ġis First : ĠBoolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Data Load Ġ= Ġon Data Load ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T > Ġattach Data ( list Result : ĠList Result < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( list Result . success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Page Num Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Result . datas Ġ!= Ġnull Ġ&& Ġlist Result . datas . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . set Enable Load More ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( re cyclerView . adapter Ġas ĠBase Quick Adapter < T , ĠBase ViewHolder >). set New Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Result . datas Ġas ĠMutable List < T > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . set Enable Load More ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( re cyclerView . adapter Ġas ĠBase Quick Adapter < T , ĠBase ViewHolder >). set New Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Result . datas Ġas ĠMutable List < T > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( re cyclerView . adapter Ġas ĠBase Quick Adapter < T , ĠBase ViewHolder >). addData ( list Result . datas Ġas ĠMutable List < T >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Page Num Ġ= Ġif Ġ( list Result . last Page Value Ġ== Ġnull ) Ġ 0 Ġelse Ġlist Result . last Page Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . finish Refresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Result . last Page Value Ġ!= Ġnull Ġ&& Ġlist Result . last Page Value Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas More Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . finish Load More () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas More Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . finish Load More With No More Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . finish Refresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hasMore ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . finish Load More () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . finish Load More With No More Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset Empty ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Empty . removeAll Views () ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= ĠLayout Params ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlayout Params . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠ Ġview . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġthis . empty View Ġ= Ġview ĊĠĠĠĠĠĠĠ Ġrefresh Empty . addView ( view , Ġlayout Params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Empty ( text : ĠString , Ġres Id : ĠInt Ġ= ĠR . drawable . common _ page _ empty ) Ġ{ ĊĠĠĠĠĠĠĠ Ġempty View . findViewById < TextView >( R . id . tv Empty ). text Ġ= Ġtext ĊĠĠĠĠĠĠĠ Ġempty View . findViewById < ImageView >( R . id . iv Empty ). setImage Resource ( res Id ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ èĩªåĬ¨ åĪ·æĸ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġauto Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġsmart Refresh Layout . auto Refresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¿Ļä¸ª æĸ¹æ³ķ è®¾ç½® å¾Ĺ åľ¨ setOn Data Load Listener ä¹ĭåĲİ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġauto Refresh No Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Data Load ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Page Num Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ( request Page Num , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset List Padding Top ( padding Top : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . set Padding ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . padding Left , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConvert Utils . dp 2 px ( padding Top ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . padding Right , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . padding Bottom ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > ĠgetData (): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( re cyclerView . adapter Ġas ĠBase Quick Adapter < T , ĠBase ViewHolder >). data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset No More Text ( no More Text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Footer . set No More Text ( no More Text ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĺ¯åĲ¦ åı¯ä»¥ åĪ·æĸ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Refresh Enable ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Layout . set Enable Refresh ( enable ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĺ¯åĲ¦ åĲ¯çĶ¨ ä¸Ĭ æĭī åĬłè½½ æĽ´å¤ļ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Enable Load More ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Layout . set Enable Load More ( enable ) ĊĠĠĠ Ġ} ĊĊ Ċ }