package Ġcom . tx l . test tv lib . test recyclerview . item . center Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . alibaba . android . v layout . Delegate Adapter Ċ import Ġcom . alibaba . android . v layout . Virtual LayoutManager Ċ import Ġcom . alibaba . android . v layout . layout . GridLayout Helper Ċ import Ġcom . alibaba . android . v layout . layout . Single Layout Helper Ċ import Ġcom . tx l . test tv lib . R Ċ import Ġcom . tx l . test tv lib . basic . adapter . Base V Layout Adapter Ċ import Ġcom . tx l . test tv lib . test recyclerview . item . center . view holder .* Ċ import Ġcom . tx l . ui _ basic . adapter . Base Recycler Factory Adapter Ċ import Ġcom . tx l . ui _ basic . view holder . Base ViewHolder Ċ import Ġcom . tx l . ui _ basic . view holder . I ViewHolder Factory Ċ import Ġkotlinx . android . synt hetic . main . activity _ test _ recycler _ view _ focus _ center .* ĊĊ Ċ /** Ċ Ġ* Ġæµ ĭ è¯ķ è®© RecyclerView çĦ ¦ çĤ¹ åħĥç´ł å§ĭ ç»Ī å±ħ ä¸Ń Ġ Ġ åĽłä¸º æ¶ ī åıĬ åĪ° å¤ļä¸ª æķ°æį® åıĺåĮĸ Ċ Ġ* Ġ 1 . æŃ£å¸¸ åĪĹè¡¨ ä¸Ń åħĥç´ł å±ħ ä¸Ń Ċ Ġ* Ġ 2 . æŃ£å¸¸ å®¹åĻ¨ åµ Į å¥Ĺ çĦ ¦ çĤ¹ å±ħ ä¸Ń ï¼Į åµ Į å¥Ĺ çļĦ RecyclerView é«ĺåº¦ ä¸į è¶ħè¿ĩ æľĢ å¤ĸ å±Ĥ çļĦ Lib Tv RecyclerView 2 ĠĠ Ġ ä¸įèĥ½ çĽ´æİ¥ åµ Į å¥Ĺ RecyclerView åĽłä¸º æĮī éĶ® çļĦ å¤ĦçĲĨ ä¼ļ å¯¼èĩ´ åĨħéĥ¨ çļĦ RecyclerView çĦ ¦ çĤ¹ æĹłæ³ķ æŃ£å¸¸ æŁ¥æī¾ Ċ Ġ* Ġ 3 . æŃ£å¸¸ å®¹åĻ¨ åµ Į å¥Ĺ çĦ ¦ çĤ¹ å±ħ ä¸Ń ï¼Į åµ Į å¥Ĺ çļĦ Lib Tv RecyclerView 2 é«ĺåº¦ ä¸į è¶ħè¿ĩ æľĢ å¤ĸ å±Ĥ çļĦ Lib Tv RecyclerView 2 Ċ Ġ* Ġ 4 . å®¹åĻ¨ åµ Į å¥Ĺ çĦ ¦ çĤ¹ å±ħ ä¸Ń ï¼Į åµ Į å¥Ĺ çļĦ RecyclerView é«ĺåº¦ è¶ħè¿ĩ æľĢ å¤ĸ å±Ĥ çļĦ Lib Tv RecyclerView 2 Ġ Ġ ä¸įèĥ½ çĽ´æİ¥ åµ Į å¥Ĺ RecyclerView åĽłä¸º æĮī éĶ® çļĦ å¤ĦçĲĨ ä¼ļ å¯¼èĩ´ åĨħéĥ¨ çļĦ RecyclerView çĦ ¦ çĤ¹ æĹłæ³ķ æŃ£å¸¸ æŁ¥æī¾ Ċ Ġ* Ġ 5 . å®¹åĻ¨ åµ Į å¥Ĺ çĦ ¦ çĤ¹ å±ħ ä¸Ń ï¼Į åµ Į å¥Ĺ çļĦ Lib Tv RecyclerView 2 é«ĺåº¦ è¶ħè¿ĩ æľĢ å¤ĸ å±Ĥ çļĦ Lib Tv RecyclerView 2 Ċ Ġ* Ġ*/ Ċ class ĠTest RecyclerView Focus Center Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġjava Class . simple Name ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ test _ recycler _ view _ focus _ center ) ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View (){ ĊĠĠĠĠĠĠĠ Ġre cycler _ title . layout Manager Ġ= ĠLinearLayoutManager ( this , Linear LayoutManager . HORIZONTAL , false ) ĊĠĠĠĠĠĠĠ Ġval Ġtitle Adapter Ġ= ĠBase Recycler Factory Adapter < String >( object : I ViewHolder Factory < Base ViewHolder >{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBase ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTitle ViewHolder . onCreate ViewHolder ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny ?> ĠgetItem ViewType ( position : ĠInt , Ġdata : ĠT ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= ĠVirtual LayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġre cycler _ content . layout Manager Ġ= Ġlayout Manager ĊĠĠĠĠĠĠĠ Ġval Ġdelegate Adapter Ġ= ĠDelegate Adapter ( layout Manager , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġre cycler _ content . adapter Ġ= Ġdelegate Adapter ĊĊĠĠĠĠĠĠĠ Ġ// æŃ£å¸¸ åĪĹè¡¨ åħĥç´ł ĊĠĠĠĠĠĠĠ Ġval Ġlayout Helper Ġ= ĠGrid Layout Helper ( 4 ) ĊĠĠĠĠĠĠĠ Ġlayout Helper . setAuto Expand ( false ) ĊĠĠĠĠĠĠĠ Ġlayout Helper . set Gap ( resources . get Dimension Pixel Size ( R . dim en . dp _ 5 )) ĊĠĠĠĠĠĠĠ Ġval Ġadapter 1 Ġ= ĠBase V Layout Adapter < String , Content ViewHolder >( object Ġ: I ViewHolder Factory < Content ViewHolder >{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠContent ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠContent ViewHolder . onCreate ViewHolder ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny ?> ĠgetItem ViewType ( position : ĠInt , Ġdata : ĠT ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, layout Helper ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter 1 . append Data ("$ i ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// åµ Į å¥Ĺ RecyclerView Ġ ĠGrid ĊĠĠĠĠĠĠĠ Ġval Ġsingle Layout Helper Ġ= ĠSingle Layout Helper () ĊĠĠĠĠĠĠĠ Ġsingle Layout Helper . margin Top Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . dp _ 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġgrid Recycler Adapter Ġ= ĠBase V Layout Adapter < String , RecyclerView ViewHolder >( object Ġ: I ViewHolder Factory < RecyclerView ViewHolder >{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRecyclerView ViewHolder . onCreate ViewHolder ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny ?> ĠgetItem ViewType ( position : ĠInt , Ġdata : ĠT ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, single Layout Helper ) ĊĠĠĠĠĠĠĠ Ġgrid Recycler Adapter . append Data (" æĪĳ æĺ¯ ç¬¬äºĮ ä¸ª ") ĊĊĠĠĠĠĠĠĠ Ġ// åµ Į å¥Ĺ RecyclerView Ġ Ġæ ° ´ å¹³ æ»ļ åĬ¨ ĊĠĠĠĠĠĠĠ Ġval Ġsingle Layout Helper 3 Ġ= ĠSingle Layout Helper () ĊĠĠĠĠĠĠĠ Ġsingle Layout Helper . margin Top Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . dp _ 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġadapter 3 Ġ= ĠBase V Layout Adapter < String , RecyclerView Horizontal ViewHolder >( object Ġ: I ViewHolder Factory < RecyclerView Horizontal ViewHolder >{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView Horizontal ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRecyclerView Horizontal ViewHolder . onCreate ViewHolder ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny ?> ĠgetItem ViewType ( position : ĠInt , Ġdata : ĠT ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, single Layout Helper 3 ) ĊĠĠĠĠĠĠĠ Ġadapter 3 . append Data (" æĪĳ æĺ¯ ç¬¬ä¸ī ä¸ª ") ĊĊĠĠĠĠĠĠĠ Ġ// æŃ£å¸¸ åĪĹè¡¨ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Helper 4 Ġ= ĠGrid Layout Helper ( 4 ) ĊĠĠĠĠĠĠĠ Ġlayout Helper 4 . set Gap ( resources . get Dimension Pixel Size ( R . dim en . dp _ 5 )) ĊĠĠĠĠĠĠĠ Ġval Ġadapter 4 Ġ= ĠBase V Layout Adapter < String , Content ViewHolder >( object Ġ: I ViewHolder Factory < Content ViewHolder >{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠContent ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠContent ViewHolder . onCreate ViewHolder ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny ?> ĠgetItem ViewType ( position : ĠInt , Ġdata : ĠT ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, layout Helper 4 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter 4 . append Data ("$ i ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsingle Layout Helper 5 Ġ= ĠSingle Layout Helper () ĊĠĠĠĠĠĠĠ Ġsingle Layout Helper . margin Top Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . dp _ 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġadapter 5 Ġ= ĠBase V Layout Adapter < String , RecyclerView Horizontal ViewHolder >( object Ġ: I ViewHolder Factory < RecyclerView Horizontal ViewHolder >{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView Horizontal ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRecyclerView Horizontal ViewHolder . onCreate ViewHolder ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny ?> ĠgetItem ViewType ( position : ĠInt , Ġdata : ĠT ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, single Layout Helper 5 ) ĊĠĠĠĠĠĠĠ Ġadapter 5 . append Data (" æĪĳ æĺ¯ ç¬¬ä¸ī ä¸ª ") ĊĊĠĠĠĠĠĠĠ Ġre cycler _ title . adapter = Ġ Ġtitle Adapter ĊĠĠĠĠĠĠĠ Ġtitle Adapter . append Data (" æŃ£å¸¸ åĪĹè¡¨ ä¸Ń åħĥç´ł å±ħ ä¸Ń ") ĊĠĠĠĠĠĠĠ Ġtitle Adapter . append Data (" åµ Į å¥Ĺ é«ĺåº¦ è¾ĥ å°ı RecyclerView ") ĊĠĠĠĠĠĠĠ Ġtitle Adapter . append Data (" åµ Į å¥Ĺ é«ĺåº¦ è¾ĥ å°ı Lib Tv RecyclerView 2 ") ĊĠĠĠĠĠĠĠ Ġtitle Adapter . append Data (" åµ Į å¥Ĺ é«ĺåº¦ è¾ĥ å¤§ RecyclerView ") ĊĠĠĠĠĠĠĠ Ġtitle Adapter . append Data (" åµ Į å¥Ĺ é«ĺåº¦ è¾ĥ å¤§ Lib Tv RecyclerView 2 ") ĊĠĠĠĠĠĠĠ Ġre cycler _ title . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ// ĠFIXME : Ġ 2 0 2 0 / 9 / 6 Ġ 8 . 0 ç³»ç»Ł è·¨ è¶Ĭ grid LayoutManager Ġä¼ļ åĩºçİ° çĦ ¦ çĤ¹ ä¸įèĥ½ æŃ£å¸¸ æĲľç´¢ ä¸Ķ å´ © æº ĥ çļĦ bug ĊĠĠĠĠĠĠĠ Ġdelegate Adapter . add Adapter ( adapter 1 ) ĊĠĠĠĠĠĠĠ Ġdelegate Adapter . add Adapter ( adapter 3 ) Ċ // ĠĠĠĠĠĠĠ Ġdelegate Adapter . add Adapter ( adapter 1 ) ĊĠĠĠĠĠĠĠ Ġdelegate Adapter . add Adapter ( adapter 4 ) Ċ // ĠĠĠĠĠĠĠ Ġdelegate Adapter . add Adapter ( adapter 5 ) Ċ // ĠĠĠĠĠĠĠ Ġre cycler _ title . setOn Checked ChangeListener Ġ{ Ġgroup , Ġchecked View , Ġposition Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," éĢī ä¸Ń Ġposition Ġ$ position ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif ( position Ġ== Ġ 0 ){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate Adapter . clear () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate Adapter . add Adapter ( adapter 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġif ( position Ġ== Ġ 1 ){ // çĽ´æİ¥ åµ Į å¥Ĺ ç³»ç»Ł çļĦ RecyclerView , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate Adapter . clear () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate Adapter . add Adapter ( adapter 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate Adapter . add Adapter ( adapter 3 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate Adapter . add Adapter ( adapter 2 ) Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate Adapter . add Adapter ( adapter 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }