package Ġme . j ing bin . by recyclerview . sticky rv . config Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 . On Page Change Callback Ċ import Ġme . j ing bin . by recyclerview . R Ċ import Ġme . j ing bin . by recyclerview . binding . Base Binding Holder Ċ import Ġme . j ing bin . by recyclerview . databinding . Sticky rv Item Main Feed s Binding Ċ import Ġme . j ing bin . library . adapter . Base By RecyclerView Adapter Ċ import Ġme . j ing bin . library . adapter . Base By ViewHolder Ċ Ċ class ĠSt ick Adapter ( private Ġval Ġactivity : ĠAppCompatActivity ) Ġ: ĠBase By RecyclerView Adapter < String , ĠBase By ViewHolder < String >>() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġtabs Loaded Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġloading Tabs Listener : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ æŃ£åľ¨ åĬłè½½ tabs ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠVIEW _ TYPE _ LOADING _ TAB S Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ// Ġ åķĨåĵģ æµģ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠVIEW _ TYPE _ FEED S Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCOLOR _ TAB _ NORMAL Ġby Ġlazy Ġ{ ĠColor . parse Color ("# 3 3 3 3 3 3 ") Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCOLOR _ TAB _ SELECTED Ġby Ġlazy Ġ{ ĠColor . parse Color ("# 2 4 8 3 D 9 ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ= Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠ 0 Ġ-> Ġif Ġ( tabs Loaded ) ĠVIEW _ TYPE _ FEED S Ġelse ĠVIEW _ TYPE _ LOADING _ TAB S ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠVIEW _ TYPE _ FEED S ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBase By ViewHolder < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVIEW _ TYPE _ LOADING _ TAB S Ġ-> ĠLoading ViewHolder ( parent , ĠR . layout . sticky rv _ item _ loading _ footer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠFeed ViewHolder ( parent , ĠR . layout . sticky rv _ item _ main _ feeds , Ġactivity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠBase By ViewHolder < String >, Ġposition : ĠInt ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġsuper . on Bind ViewHolder ( holder , Ġposition ) ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠLoading ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading Tabs Listener ?. invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ä¿¡æģ¯ æµģ */ ĊĠĠĠ Ġclass ĠFeed ViewHolder ( view Group : ĠViewGroup ?, Ġlayout Id : ĠInt , Ġactivity : ĠAppCompatActivity ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Binding Holder < String , ĠSt icky rv Item Main Feed s Binding >( view Group , Ġlayout Id ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtab List Ġ= ĠArrayList < TextView >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfeeds ViewPager Ġ= Ġbinding . main Feed s ViewPager ĊĊĠĠĠĠĠĠĠ Ġ/** æŀĦéĢł æĸ¹æ³ķ */ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeeds ViewPager . orientation Ġ= ĠView Pager 2 . OR IENTATION _ HORIZONTAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeeds ViewPager . off screen Page Limit Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeeds ViewPager . adapter Ġ= ĠFeed s List Java Adapter ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Tabs () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbind Tabs () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtab ClickListener Ġ= ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠindexOf Ġ= Ġtab List . indexOf ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeeds ViewPager . currentItem Ġ= ĠindexOf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab List . add ( binding . feeds Tab 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab List . add ( binding . feeds Tab 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab List . add ( binding . feeds Tab 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab List . add ( binding . feeds Tab 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab List . add ( binding . feeds Tab 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( tab Ġin Ġtab List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . setOnClickListener ( tab ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeeds ViewPager . register On Page Change Callback ( object Ġ: ĠOn Page Change Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Selected ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Tab Changed ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Tab Changed ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġon Tab Changed ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Ġ= Ġtab List . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġnum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= Ġtab List [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġposition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( COLOR _ TAB _ SELECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . paint . is Fake Bold Text Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setText Size ( Typed Value . COMPLEX _ UNIT _ SP , Ġ 1 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( COLOR _ TAB _ NORMAL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . paint . is Fake Bold Text Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setText Size ( Typed Value . COMPLEX _ UNIT _ SP , Ġ 1 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Binding View ( holder : ĠBase Binding Holder < *, Ġ*> ?, Ġbean : ĠString ?, Ġposition : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** åĬłè½½ ä¸ŃçļĦ å¸ĥå±Ģ */ ĊĠĠĠ Ġclass ĠLoading ViewHolder ( view Group : ĠViewGroup ?, Ġlayout Id : ĠInt ) Ġ: ĠBase By ViewHolder < String >( view Group , Ġlayout Id ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Base BindView ( holder : ĠBase By ViewHolder < String > ?, Ġbean : ĠString ?, Ġposition : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Loading Tabs Listener ( listener : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . loading Tabs Listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Tabs Loaded () Ġ{ ĊĠĠĠĠĠĠĠ Ġtabs Loaded Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġrefresh Notify Item Changed ( 0 ) ĊĠĠĠ Ġ} Ċ }