Skip to content

Commit 904c28d

Browse files
author
John Gray
committed
Rename StickyRecyclerHeaderVisibleAdapter to ItemVisibilityAdapter.
Provided more documentation.
1 parent 3dd73c6 commit 904c28d

File tree

4 files changed

+43
-20
lines changed

4 files changed

+43
-20
lines changed

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,16 @@ The StickyHeaders aren't aware of your adapter so if you must notify them when y
8383
});
8484
```
8585

86+
If the Reccylerview's layout manager implements getExtraLayoutSpace (to preload more content then is visible for preformance resaons), you must implment ItemVisibilityAdapter and pass an instance as a second argment to StickyRecyclerHeadersDecoration's constuctor.
87+
```java
88+
@Override
89+
public boolean isPositionVisible(final int position) {
90+
return layoutManager.findFirstVisibleItemPosition() <= position
91+
&& layoutManager.findLastVisibleItemPosition() >= position;
92+
}
93+
```
94+
95+
8696
Item animators don't play nicely with RecyclerView decorations, so your mileage with that may vary.
8797

8898
Compatibility
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.timehop.stickyheadersrecyclerview;
2+
3+
/**
4+
* ItemVisibilityAdapter provides a way for StickyRecyclerHeadersDecoration
5+
* to know if a row is visible or not. This comes into play if the
6+
* recyclerview's layout manager is set up to provide extra layout space (by
7+
* overriding getExtraLayoutSpace). In this case rows that aren't visible (yet)
8+
* will be bound and StickyRecyclerHeadersDecoration will need to know which
9+
* are visible to correctly calculate the row to base the sticky header on
10+
*
11+
* To use it you must pass an instance of a class that implements this
12+
* interface as a second argment StickyRecyclerHeadersDecoration's constructor.
13+
*
14+
*/
15+
public interface ItemVisibilityAdapter {
16+
17+
/**
18+
*
19+
* Return true the specified adapter position is visible, false otherwise
20+
*
21+
* The implementation of this method will typically return true if
22+
* the position is between the layout manager's findFirstVisibleItemPosition
23+
* and findLastVisibleItemPosition (inclusive).
24+
*
25+
* @param position the adapter position
26+
*/
27+
boolean isPositionVisible(final int position);
28+
}

library/src/main/java/com/timehop/stickyheadersrecyclerview/StickyRecyclerHeadersDecoration.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
public class StickyRecyclerHeadersDecoration extends RecyclerView.ItemDecoration {
1818

1919
private final StickyRecyclerHeadersAdapter mAdapter;
20-
private final StickyRecyclerHeadersVisibleAdapter mVisibilityAdapter;
20+
private final ItemVisibilityAdapter mVisibilityAdapter;
2121
private final SparseArray<Rect> mHeaderRects = new SparseArray<>();
2222
private final HeaderProvider mHeaderProvider;
2323
private final OrientationProvider mOrientationProvider;
@@ -36,26 +36,26 @@ public StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter) {
3636
this(adapter, new LinearLayoutOrientationProvider(), new DimensionCalculator(), null);
3737
}
3838

39-
public StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter, StickyRecyclerHeadersVisibleAdapter visibilityAdapter) {
39+
public StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter, ItemVisibilityAdapter visibilityAdapter) {
4040
this(adapter, new LinearLayoutOrientationProvider(), new DimensionCalculator(), visibilityAdapter);
4141
}
4242

4343
private StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter, OrientationProvider orientationProvider,
44-
DimensionCalculator dimensionCalculator, StickyRecyclerHeadersVisibleAdapter visibilityAdapter) {
44+
DimensionCalculator dimensionCalculator, ItemVisibilityAdapter visibilityAdapter) {
4545
this(adapter, orientationProvider, dimensionCalculator, new HeaderRenderer(orientationProvider),
4646
new HeaderViewCache(adapter, orientationProvider), visibilityAdapter);
4747
}
4848

4949
private StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter, OrientationProvider orientationProvider,
50-
DimensionCalculator dimensionCalculator, HeaderRenderer headerRenderer, HeaderProvider headerProvider, StickyRecyclerHeadersVisibleAdapter visibilityAdapter) {
50+
DimensionCalculator dimensionCalculator, HeaderRenderer headerRenderer, HeaderProvider headerProvider, ItemVisibilityAdapter visibilityAdapter) {
5151
this(adapter, headerRenderer, orientationProvider, dimensionCalculator, headerProvider,
5252
new HeaderPositionCalculator(adapter, headerProvider, orientationProvider,
5353
dimensionCalculator), visibilityAdapter);
5454
}
5555

5656
private StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter, HeaderRenderer headerRenderer,
5757
OrientationProvider orientationProvider, DimensionCalculator dimensionCalculator, HeaderProvider headerProvider,
58-
HeaderPositionCalculator headerPositionCalculator, StickyRecyclerHeadersVisibleAdapter visibilityAdapter) {
58+
HeaderPositionCalculator headerPositionCalculator, ItemVisibilityAdapter visibilityAdapter) {
5959
mAdapter = adapter;
6060
mHeaderProvider = headerProvider;
6161
mOrientationProvider = orientationProvider;

library/src/main/java/com/timehop/stickyheadersrecyclerview/StickyRecyclerHeadersVisibleAdapter.java

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)