@@ -25,45 +25,50 @@ public class StickyRecyclerHeadersDecoration extends RecyclerView.ItemDecoration
2525 private final HeaderRenderer mRenderer ;
2626 private final DimensionCalculator mDimensionCalculator ;
2727 private StickyRecyclerHeadersPositionChangeListener mHeaderListener ;
28+ private boolean mEnableStickyHeader = true ;
2829
2930 /**
3031 * The following field is used as a buffer for internal calculations. Its sole purpose is to avoid
3132 * allocating new Rect every time we need one.
3233 */
3334 private final Rect mTempRect = new Rect ();
3435
35- // TODO: Consider passing in orientation to simplify orientation accounting within calculation
3636 public StickyRecyclerHeadersDecoration (StickyRecyclerHeadersAdapter adapter ) {
37- this (adapter , new LinearLayoutOrientationProvider (), new DimensionCalculator (), null );
37+ this (adapter , new LinearLayoutOrientationProvider (), new DimensionCalculator (), null , true );
3838 }
3939
40- public StickyRecyclerHeadersDecoration (StickyRecyclerHeadersAdapter adapter , ItemVisibilityAdapter visibilityAdapter ) {
41- this (adapter , new LinearLayoutOrientationProvider (), new DimensionCalculator (), visibilityAdapter );
40+ public StickyRecyclerHeadersDecoration (StickyRecyclerHeadersAdapter adapter , boolean enableStickyHeader ) {
41+ this (adapter , new LinearLayoutOrientationProvider (), new DimensionCalculator (), null , enableStickyHeader );
42+ }
43+
44+ public StickyRecyclerHeadersDecoration (StickyRecyclerHeadersAdapter adapter , ItemVisibilityAdapter visibilityAdapter , boolean enableStickyHeader ) {
45+ this (adapter , new LinearLayoutOrientationProvider (), new DimensionCalculator (), visibilityAdapter , enableStickyHeader );
4246 }
4347
4448 private StickyRecyclerHeadersDecoration (StickyRecyclerHeadersAdapter adapter , OrientationProvider orientationProvider ,
45- DimensionCalculator dimensionCalculator , ItemVisibilityAdapter visibilityAdapter ) {
49+ DimensionCalculator dimensionCalculator , ItemVisibilityAdapter visibilityAdapter , boolean enableStickyHeader ) {
4650 this (adapter , orientationProvider , dimensionCalculator , new HeaderRenderer (orientationProvider ),
47- new HeaderViewCache (adapter , orientationProvider ), visibilityAdapter );
51+ new HeaderViewCache (adapter , orientationProvider ), visibilityAdapter , enableStickyHeader );
4852 }
4953
5054 private StickyRecyclerHeadersDecoration (StickyRecyclerHeadersAdapter adapter , OrientationProvider orientationProvider ,
51- DimensionCalculator dimensionCalculator , HeaderRenderer headerRenderer , HeaderProvider headerProvider , ItemVisibilityAdapter visibilityAdapter ) {
55+ DimensionCalculator dimensionCalculator , HeaderRenderer headerRenderer , HeaderProvider headerProvider , ItemVisibilityAdapter visibilityAdapter , boolean enableStickyHeader ) {
5256 this (adapter , headerRenderer , orientationProvider , dimensionCalculator , headerProvider ,
5357 new HeaderPositionCalculator (adapter , headerProvider , orientationProvider ,
54- dimensionCalculator ), visibilityAdapter );
58+ dimensionCalculator ), visibilityAdapter , enableStickyHeader );
5559 }
5660
5761 private StickyRecyclerHeadersDecoration (StickyRecyclerHeadersAdapter adapter , HeaderRenderer headerRenderer ,
5862 OrientationProvider orientationProvider , DimensionCalculator dimensionCalculator , HeaderProvider headerProvider ,
59- HeaderPositionCalculator headerPositionCalculator , ItemVisibilityAdapter visibilityAdapter ) {
63+ HeaderPositionCalculator headerPositionCalculator , ItemVisibilityAdapter visibilityAdapter , boolean enableStickyHeader ) {
6064 mAdapter = adapter ;
6165 mHeaderProvider = headerProvider ;
6266 mOrientationProvider = orientationProvider ;
6367 mRenderer = headerRenderer ;
6468 mDimensionCalculator = dimensionCalculator ;
6569 mHeaderPositionCalculator = headerPositionCalculator ;
6670 mVisibilityAdapter = visibilityAdapter ;
71+ mEnableStickyHeader = enableStickyHeader ;
6772 }
6873
6974 @ Override
@@ -120,10 +125,10 @@ public void onDrawOver(Canvas canvas, RecyclerView parent, RecyclerView.State st
120125 headerOffset = new Rect ();
121126 mHeaderRects .put (position , headerOffset );
122127 }
123- mHeaderPositionCalculator .initHeaderBounds (headerOffset , parent , header , itemView , hasStickyHeader );
128+ mHeaderPositionCalculator .initHeaderBounds (headerOffset , parent , header , itemView , hasStickyHeader , mEnableStickyHeader );
124129 mRenderer .drawHeader (parent , canvas , header , headerOffset );
125130
126- if (mHeaderListener != null ) {
131+ if (mEnableStickyHeader && mHeaderListener != null ) {
127132 mHeaderListener .onHeaderPositionChanged (this , mAdapter .getHeaderId (position ), header , position , headerOffset );
128133 }
129134 }
@@ -184,4 +189,12 @@ public void invalidateHeaders() {
184189 public void setHeaderPositionListener (StickyRecyclerHeadersPositionChangeListener headerListener ) {
185190 this .mHeaderListener = headerListener ;
186191 }
192+
193+ public void enableStickyHeaders (boolean enableStickyHeaders ) {
194+ this .mEnableStickyHeader = enableStickyHeaders ;
195+ }
196+
197+ public boolean isStickyHeadersEnabled () {
198+ return this .mEnableStickyHeader ;
199+ }
187200}
0 commit comments