package Ġcom . github . ch u ross . recyclerview . sample Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġcom . github . ch u ross . recyclerview . sample . databinding . Activity Main Binding Ċ import Ġcom . github . ch u ross . recyclerview adapters .* Ċ import Ġio . reactivex . processors . Behavior Processor Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmax Span Size Ġ= Ġ 4 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠData Binding Util . set ContentView < Activity Main Binding >( this , ĠR . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcomposite Recycler Adapter Ġ= ĠComposite Recycler Adapter () ĊĊĠĠĠĠĠĠĠ Ġval Ġheader View Item Ġ= ĠView Item ( this , ĠR . layout . item _ hello _ world ) ĊĠĠĠĠĠĠĠ Ġval Ġheader Visibility ToggleButton Ġ= ĠView Item ( this , ĠR . layout . visible _ toggle , ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader View Item . isVisible Ġ= Ġ! header View Item . isVisible ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Adapter 1 Ġ= ĠText Item Adapter ( this ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add (" item Adapter 1 # 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" click ! Ġadapter 1 ::$ item ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setOn Item Long Press Listener Ġ{ Ġ_, Ġ_, Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" long Ġpress ! Ġadapter 1 ::$ item ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġitem Adapter 1 Append Button Ġ= ĠAppend Button View Item ( this , ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter 1 . add (" item Adapter 1 #" Ġ+ Ġitem Adapter 1 . item Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter 1 . add (" item Adapter 1 #" Ġ+ Ġitem Adapter 1 . item Count ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRx Java # Flow able Ġbinding Ġadapter ĊĠĠĠĠĠĠĠ Ġval Ġitem Adapter 2 Rx Source Ġ= ĠBehavior Processor . create Default ( listOf (" item Adapter 2 # 0 ")) ĊĠĠĠĠĠĠĠ Ġval Ġitem Adapter 2 Ġ= ĠGrid Text Item Adapter ( this , Ġitem Adapter 2 Rx Source ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" click ! Ġadapter 2 ::$ item ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġitem Adapter 2 Append Button Ġ= ĠAppend Button View Item ( this , ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġ" Rx Item Adapter 2 #" Ġ+ Ġitem Adapter 2 . item Count . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter 2 Rx Source . onNext ( item Adapter 2 Rx Source . value . plus ( value )) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġitem Adapter 2 Visibility ToggleButton Ġ= ĠView Item ( this , ĠR . layout . visible _ toggle , ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter 2 . setVisible (! item Adapter 2 . isVisible , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Adapter 3 Ġ= ĠText Item Adapter ( this , ĠColor . MAG ENT A ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add (" item Adapter 3 # Ġsame Ġas Ġitem Adapter 1 's Ġlayout Ġ[ draggable ] Ġ# 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add (" item Adapter 3 # Ġsame Ġas Ġitem Adapter 1 's Ġlayout Ġ[ draggable ] Ġ# 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add (" item Adapter 3 # Ġsame Ġas Ġitem Adapter 1 's Ġlayout Ġ[ draggable ] Ġ# 3 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnested Text Adapter Ġ= ĠText Item Adapter ( this ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add (" nested Ġitem Ġadapter Ġ# 1 - 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add (" nested Ġitem Ġadapter Ġ# 1 - 1 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdeep Nested Text Adapter Ġ= ĠText Item Adapter ( this , ĠColor . parse Color ("# 3 8 8 E 3 C ")). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add (" deep Ġnested Ġitem Ġ[ draggable ] Ġ# 2 - 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add (" deep Ġnested Ġitem Ġ[ draggable ] Ġ# 2 - 2 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnested Adapter Ġ= ĠComposite Recycler Adapter (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add ( nested Text Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add ( Composite Recycler Adapter (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add ( deep Nested Text Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnested Adapter Visibility ToggleButton Ġ= ĠView Item ( this , ĠR . layout . visible _ toggle , ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnested Adapter . setVisible (! nested Adapter . isVisible , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġview Item Adapter Ġ= ĠView Item Adapter ( this ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add ( View Item ( this , ĠR . layout . item _ footer _ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add ( View Item ( this , ĠR . layout . item _ footer _ 2 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġview Item Adapter Append Button Ġ= ĠAppend Button View Item ( this , ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Item Adapter . add ( View Item ( this , ĠR . layout . item _ footer _ 1 )) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġadd Ġto ĠComposite Recycler Adapter ĊĠĠĠĠĠĠĠĠ Ġ* Ġwill Ġbe Ġmerged Ġall ĠLocal Adapter ! ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġcomposite Recycler Adapter . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader View Item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Visibility ToggleButton , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter 1 Append Button , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter 2 Append Button , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter 2 Visibility ToggleButton , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested Adapter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested Adapter Visibility ToggleButton , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Item Adapter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Item Adapter Append Button ĊĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġsetup ĠRecyclerView Ġby ĠComposite Recycler Adapter . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= Ġbinding . list ĊĠĠĠĠĠĠĠ Ġval Ġgrid LayoutManager Ġ= ĠGrid LayoutManager ( this , Ġmax Span Size ) ĊĊĠĠĠĠĠĠĠ Ġre cyclerView . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcan Ġuse ĠLinearLayoutManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . layout Manager Ġ= Ġgrid LayoutManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . adapter Ġ= Ġcomposite Recycler Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSpan Size Lookup Ġsupport ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ warning Ġmust Ġbe Ġuse ĠGrid LayoutManager !! ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġgrid LayoutManager . span Size Lookup Ġ= ĠSpan Size Lookup Builder ( composite Recycler Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( header View Item , Ġmax Span Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( header Visibility ToggleButton , Ġmax Span Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( item Adapter 1 , Ġmax Span Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( item Adapter 2 Visibility ToggleButton , Ġmax Span Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( item Adapter 3 , Ġmax Span Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( nested Text Adapter , Ġmax Span Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( nested Adapter Visibility ToggleButton , Ġmax Span Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( deep Nested Text Adapter , Ġmax Span Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( view Item Adapter , Ġmax Span Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( Append Button View Item :: class . java , Ġmax Span Size ) Ġ// can Ġalso Ġregister ĠClass ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGrid Padding Ġsupport ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ warning Ġmust Ġbe Ġuse ĠGrid LayoutManager !! ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġpadding Ġ= Ġ 1 6 ĊĠĠĠĠĠĠĠ Ġre cyclerView . addItem Decoration ( Grid Padding Item Decoration Builder ( composite Recycler Adapter , Ġpadding , Ġmax Span Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding Type ( Grid Padding Item Decoration Builder . Padding Type . BOTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( header Visibility ToggleButton ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( item Adapter 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( Append Button View Item :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġnested Item Padding Ġ= Ġ 6 4 ĊĠĠĠĠĠĠĠ Ġre cyclerView . addItem Decoration ( Grid Padding Item Decoration Builder ( composite Recycler Adapter , Ġnested Item Padding , Ġmax Span Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding Type ( Grid Padding Item Decoration Builder . Padding Type . VERTICAL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( deep Nested Text Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠList Ġitem Ġdivider Ġsupport ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġdivider Height Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . divider _ height ) Ġ// Ġ 1 dp ĊĊĠĠĠĠĠĠĠ Ġre cyclerView . addItem Decoration ( Divider Item Decoration Builder ( composite Recycler Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. divider Height ( divider Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. divider Color ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( header Visibility ToggleButton ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( item Adapter 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( item Adapter 1 Append Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( item Adapter 2 Append Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( nested Text Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( deep Nested Text Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĊĠĠĠĠĠĠĠ Ġre cyclerView . addItem Decoration ( Divider Item Decoration Builder ( composite Recycler Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. divider Height ( divider Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. divider Color ( Color . MAG ENT A ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( item Adapter 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĊĠĠĠĠĠĠĠ Ġre cyclerView . addItem Decoration ( Divider Item Decoration Builder ( composite Recycler Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. divider Height ( divider Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. divider Color ( Color . parse Color ("# 3 8 8 E 3 C ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( deep Nested Text Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDrag ging Ġsupport ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġdrag Helper Ġ= ĠDrag Item Touch Helper Builder ( composite Recycler Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. drag Flag ( Item Touch Helper . UP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. drag Flag ( Item Touch Helper . DOWN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( item Adapter 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( deep Nested Text Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġdrag Helper . attach To RecyclerView ( re cyclerView ) ĊĠĠĠ Ġ} Ċ Ċ }