1717public class StickyRecyclerHeadersDecoration extends RecyclerView .ItemDecoration {
1818
1919 private final StickyRecyclerHeadersAdapter mAdapter ;
20+ private final StickyRecyclerHeadersVisibleAdapter mVisibilityAdapter ;
2021 private final SparseArray <Rect > mHeaderRects = new SparseArray <>();
2122 private final HeaderProvider mHeaderProvider ;
2223 private final OrientationProvider mOrientationProvider ;
@@ -32,31 +33,36 @@ public class StickyRecyclerHeadersDecoration extends RecyclerView.ItemDecoration
3233
3334 // TODO: Consider passing in orientation to simplify orientation accounting within calculation
3435 public StickyRecyclerHeadersDecoration (StickyRecyclerHeadersAdapter adapter ) {
35- this (adapter , new LinearLayoutOrientationProvider (), new DimensionCalculator ());
36+ this (adapter , new LinearLayoutOrientationProvider (), new DimensionCalculator (), null );
37+ }
38+
39+ public StickyRecyclerHeadersDecoration (StickyRecyclerHeadersAdapter adapter , StickyRecyclerHeadersVisibleAdapter visibilityAdapter ) {
40+ this (adapter , new LinearLayoutOrientationProvider (), new DimensionCalculator (), visibilityAdapter );
3641 }
3742
3843 private StickyRecyclerHeadersDecoration (StickyRecyclerHeadersAdapter adapter , OrientationProvider orientationProvider ,
39- DimensionCalculator dimensionCalculator ) {
44+ DimensionCalculator dimensionCalculator , StickyRecyclerHeadersVisibleAdapter visibilityAdapter ) {
4045 this (adapter , orientationProvider , dimensionCalculator , new HeaderRenderer (orientationProvider ),
41- new HeaderViewCache (adapter , orientationProvider ));
46+ new HeaderViewCache (adapter , orientationProvider ), visibilityAdapter );
4247 }
4348
4449 private StickyRecyclerHeadersDecoration (StickyRecyclerHeadersAdapter adapter , OrientationProvider orientationProvider ,
45- DimensionCalculator dimensionCalculator , HeaderRenderer headerRenderer , HeaderProvider headerProvider ) {
50+ DimensionCalculator dimensionCalculator , HeaderRenderer headerRenderer , HeaderProvider headerProvider , StickyRecyclerHeadersVisibleAdapter visibilityAdapter ) {
4651 this (adapter , headerRenderer , orientationProvider , dimensionCalculator , headerProvider ,
4752 new HeaderPositionCalculator (adapter , headerProvider , orientationProvider ,
48- dimensionCalculator ));
53+ dimensionCalculator ), visibilityAdapter );
4954 }
5055
5156 private StickyRecyclerHeadersDecoration (StickyRecyclerHeadersAdapter adapter , HeaderRenderer headerRenderer ,
5257 OrientationProvider orientationProvider , DimensionCalculator dimensionCalculator , HeaderProvider headerProvider ,
53- HeaderPositionCalculator headerPositionCalculator ) {
58+ HeaderPositionCalculator headerPositionCalculator , StickyRecyclerHeadersVisibleAdapter visibilityAdapter ) {
5459 mAdapter = adapter ;
5560 mHeaderProvider = headerProvider ;
5661 mOrientationProvider = orientationProvider ;
5762 mRenderer = headerRenderer ;
5863 mDimensionCalculator = dimensionCalculator ;
5964 mHeaderPositionCalculator = headerPositionCalculator ;
65+ mVisibilityAdapter = visibilityAdapter ;
6066 }
6167
6268 @ Override
@@ -131,7 +137,7 @@ public int findHeaderPositionUnder(int x, int y) {
131137 Rect rect = mHeaderRects .get (mHeaderRects .keyAt (i ));
132138 if (rect .contains (x , y )) {
133139 int position = mHeaderRects .keyAt (i );
134- if (mAdapter .isPositionVisible (position )) {
140+ if (mVisibilityAdapter == null || mVisibilityAdapter .isPositionVisible (position )) {
135141 return position ;
136142 }
137143 }
0 commit comments