package Ġcom . jay . widget . layout manager . demo Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager . Span Size Lookup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder Ċ import Ġandroidx . recyclerview . widget . St agger ed Grid LayoutManager Ċ import Ġcom . jay . widget . Sticky Headers Ċ import Ġcom . jay . widget . Sticky Headers . View Setup Ċ import Ġcom . jay . widget . Sticky Headers Grid LayoutManager Ċ import Ġcom . jay . widget . Sticky Headers Linear LayoutManager Ċ import Ġcom . jay . widget . Sticky Headers St agger ed Grid LayoutManager Ċ import Ġjava . util .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm RecyclerView : ĠRecyclerView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Adapter : ĠMy Adapter ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġm RecyclerView Ġ= ĠfindViewById ( R . id . recycler _ view ) ĊĠĠĠĠĠĠĠ Ġm RecyclerView ?. set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġset Linear LayoutManager () ĊĠĠĠĠĠĠĠ Ġm Adapter Ġ= ĠMy Adapter () ĊĠĠĠĠĠĠĠ Ġm RecyclerView ?. setAdapter ( m Adapter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . main , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu 1 Ġ-> Ġset Linear LayoutManager () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu 2 Ġ-> Ġset Grid LayoutManager () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu 3 Ġ-> Ġset St agger ed Grid LayoutManager () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Linear LayoutManager () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= ĠSt icky Headers Linear LayoutManager < My Adapter >( this ) ĊĠĠĠĠĠĠĠ Ġm RecyclerView ?. layout Manager Ġ= Ġlayout Manager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Grid LayoutManager () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= ĠSt icky Headers Grid LayoutManager < My Adapter >( this , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġlayout Manager . span Size Lookup Ġ= Ġobject Ġ: ĠSpan Size Lookup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Span Size ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m Adapter ?. is Sticky Header ( position ) !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm RecyclerView ?. layout Manager Ġ= Ġlayout Manager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset St agger ed Grid LayoutManager () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= ĠSt icky Headers St agger ed Grid LayoutManager < My Adapter >( 3 , ĠSt agger ed Grid LayoutManager . VERTICAL ) ĊĠĠĠĠĠĠĠ Ġm RecyclerView !!. layout Manager Ġ= Ġlayout Manager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠMy Adapter Ġ: ĠRecyclerView . Adapter < My ViewHolder >(), ĠSt icky Headers , ĠView Setup Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdatas : ĠMutable List < String > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 6 5 Ġuntil Ġ 2 6 Ġ+ Ġ 6 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatas . add ( i . to Char (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Text Ġ= ĠgetItem Text ( i . to Char ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatas . add ( item Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetItem Text ( prefix : ĠChar ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġcreate Random ( 0 , Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( prefix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= Ġcreate Random ( 0 , Ġ 5 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( DICT [ random ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Random ( min : ĠInt , Ġmax : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠRandom () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrandom . nextInt ( max ) Ġ% Ġ( max Ġ- Ġmin Ġ+ Ġ 1 ) Ġ+ Ġmin ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠMy ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( view Type Ġ== ĠHEADER _ ITEM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinf late Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . header _ item , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy ViewHolder ( inflate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinf late Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . list _ item , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy ViewHolder ( inflate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠMy ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġdatas [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= Ġholder . item View . findViewById < TextView >( android . R . id . text 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġitem ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdatas . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( position Ġ% Ġ 1 1 Ġ== Ġ 0 ) ĠHEADER _ ITEM Ġelse Ġsuper . getItem ViewType ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Sticky Header ( position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠgetItem ViewType ( position ) Ġ== ĠHEADER _ ITEM ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsetup Sticky Header View ( sticky Header : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsticky Header ?. let Ġ{ ĠView Compat . set Elevation ( it , Ġ 1 0 f ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġteardown Sticky Header View ( sticky Header : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsticky Header ?. let Ġ{ ĠView Compat . set Elevation ( it , Ġ 0 f ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Attached To Window ( holder : ĠMy ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on View Attached To Window ( holder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġholder . item View . layout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lp Ġ!= Ġnull Ġ&& Ġlp Ġis ĠSt agger ed Grid LayoutManager . LayoutParams ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Sticky Header ( holder . layout Position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . is Full Span Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠDI CT Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" A ", Ġ" B ", Ġ" C ", Ġ" D ", Ġ" E ", Ġ" F ", Ġ" G ", Ġ" H ", Ġ" I ", Ġ" J ", Ġ" K ", Ġ" L ", Ġ" M ", Ġ" N ", Ġ" O ", Ġ" P ", Ġ" Q ", Ġ" R ", Ġ" S ", Ġ" T ", Ġ" U ", Ġ" V ", Ġ" W ", Ġ" X ", Ġ" Y ", Ġ" Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a ", Ġ" b ", Ġ" c ", Ġ" d ", Ġ" e ", Ġ" f ", Ġ" g ", Ġ" h ", Ġ" i ", Ġ" j ", Ġ" k ", Ġ" l ", Ġ" m ", Ġ" n ", Ġ" o ", Ġ" p ", Ġ" q ", Ġ" r ", Ġ" s ", Ġ" t ", Ġ" u ", Ġ" v ", Ġ" w ", Ġ" x ", Ġ" y ", Ġ" z " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠHEADER _ ITEM Ġ= Ġ 1 2 3 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠMy ViewHolder ( item View : ĠView ?) Ġ: ĠViewHolder ( item View !! ) Ċ }