package Ġcom . sec . common . k tx Ċ Ċ import Ġandroidx . core . view . children Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ 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 . constant . Refresh State Ċ import Ġcom . sc wang . smart . refresh . layout . listener . On Refresh Load More Listener Ċ Ċ /** Ċ Ġ* ĠRecyclerView åĽŀ æ»ļ åĪ° é¡¶ éĥ¨ ï¼Į å½ĵ çĪ¶ æİ§ä»¶ ä¸º [ Smart Refresh Layout ] åĪĻ è°ĥçĶ¨ ä¸ĭ æĭī åĪ·æĸ° Ċ Ġ*/ Ċ fun ĠRecyclerView . auto Refresh ( target : ĠInt Ġ= Ġ 3 ) Ġ{ ĊĠĠĠ Ġval Ġlayout Manager Ġ= Ġthis . layout Manager ĊĠĠĠ Ġif Ġ( layout Manager Ġis ĠLinearLayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġlayout Manager . findFirst Comp let ely Visible Item Position () ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ> Ġtarget ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager . scrollTo Position ( target ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsmooth Scroll To Position ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġthis . parent ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġis ĠSmart Refresh Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent . auto Refresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ æĸ° æĪ¿ åĪĨé¡µ åĬłè½½ å®ĮæĪĲ ï¼Į page Index è¡¨ç¤º ç´¢å¼ķ ï¼Į ç¬¬ä¸Ģ é¡µ ï¼ļ 0 ï¼Į ç¬¬äºĮ é¡µ ï¼ļ 1 0 Ċ Ġ*/ Ċ fun ĠSmart Refresh Layout . f izz Load Complete ( page Index : ĠInt , Ġtotal : ĠInt , Ġpage Count : ĠInt Ġ= Ġ 1 0 ) Ġ{ ĊĠĠĠ Ġload Complete ( page Index Ġ+ Ġpage Count , Ġtotal ) Ċ } Ċ Ċ /** Ċ Ġ* ĠåĪĨ é¡µ åĬłè½½ å®ĮæĪĲ ï¼Į page Index è¡¨ç¤º é¡µ çłģ ï¼Į ç¬¬ä¸Ģ é¡µ ï¼ļ 1 ï¼Į ç¬¬äºĮ é¡µ ï¼ļ 2 Ċ Ġ*/ Ċ fun ĠSmart Refresh Layout . load Finish ( page Index : ĠInt , Ġtotal : ĠInt , Ġpage Count : ĠInt Ġ= Ġ 1 0 ) Ġ{ ĊĠĠĠ Ġload Complete (( page Index ) Ġ* Ġpage Count , Ġtotal ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ åĬłè½½ å®ĮæĪĲ Ċ Ġ* Ċ Ġ* Ġ@ param Ġdisplayed Ġ å·² åĬłè½½ æķ°éĩı Ċ Ġ* Ġ@ param Ġtotal Ġ åĪĹè¡¨ æĢ» æķ°éĩı Ċ Ġ*/ Ċ fun ĠSmart Refresh Layout . load Complete ( display ed : ĠInt , Ġtotal : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġno More Data Ġ= Ġdisplayed Ġ>= Ġtotal ĊĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRefresh State . Refresh ing Ġ-> Ġ{// ä¸ĭ æĭī åĪ·æĸ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Refresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset No More Data ( no More Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 4 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠRefresh State . Loading Ġ-> Ġ{// åĬłè½½ æĽ´å¤ļ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( no More Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Load More With No More Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Load More () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset No More Data ( no More Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠSmart Refresh Layout . scrollTop ( target : ĠInt Ġ= Ġ 3 ) Ġ{ ĊĠĠĠ Ġchildren . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= Ġit . is Class < RecyclerView >() ĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= Ġre cyclerView ?. layout Manager ?. is Class < Linear LayoutManager >() ĊĠĠĠĠĠĠĠ Ġlayout Manager ?. also Ġ{ Ġlm Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġlm . findFirst Comp let ely Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ> Ġtarget ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager . scrollTo Position ( target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . smooth Scroll To Position ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Smart Refresh Layout ] åĪ·æĸ° ãĢģ åĬłè½½ æĽ´å¤ļ åĽŀè°ĥ Ċ Ġ*/ Ċ class ĠSmart Refresh Callback Ġ: ĠOn Refresh Load More Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġrefresh : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġload More : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġin fix Ġfun Ġon Refresh ( block : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Ġ= Ġblock ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġin fix Ġfun ĠonLoad More ( block : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġload More Ġ= Ġblock ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonLoad More ( refresh Layout : ĠRefresh Layout ) Ġ{ ĊĠĠĠĠĠĠĠ Ġload More ?. invoke () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Refresh ( refresh Layout : ĠRefresh Layout ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh ?. invoke () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Smart Refresh Layout ] è®¾ç½® åĪ·æĸ° ãĢģ æĽ´å¤ļ åĽŀè°ĥ Ċ Ġ*/ Ċ inline Ġfun ĠSmart Refresh Layout . on Smart Refresh Callback ( cross inline Ġcallback : ĠSmart Refresh Callback . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġset On Refresh Load More Listener ( Smart Refresh Callback (). apply ( callback )) Ċ } ĊĊ