Skip to content

Commit ea3bb28

Browse files
author
Rafael Dominiquini
committed
Allowing StaggeredGridLayoutManager
1 parent 4dc2ba6 commit ea3bb28

File tree

5 files changed

+53
-46
lines changed

5 files changed

+53
-46
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import com.timehop.stickyheadersrecyclerview.caching.HeaderViewCache;
1616
import com.timehop.stickyheadersrecyclerview.calculation.DimensionCalculator;
1717
import com.timehop.stickyheadersrecyclerview.rendering.HeaderRenderer;
18-
import com.timehop.stickyheadersrecyclerview.util.LinearLayoutOrientationProvider;
18+
import com.timehop.stickyheadersrecyclerview.util.LayoutManagerOrientationProvider;
1919
import com.timehop.stickyheadersrecyclerview.util.OrientationProvider;
2020

2121
public class StickyRecyclerHeadersDecoration extends RecyclerView.ItemDecoration {
@@ -39,11 +39,11 @@ public class StickyRecyclerHeadersDecoration extends RecyclerView.ItemDecoration
3939
private final Rect mTempRect = new Rect();
4040

4141
public StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter) {
42-
this(adapter, new LinearLayoutOrientationProvider(), new DimensionCalculator(), true);
42+
this(adapter, new LayoutManagerOrientationProvider(), new DimensionCalculator(), true);
4343
}
4444

4545
public StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter, boolean enableStickyHeader) {
46-
this(adapter, new LinearLayoutOrientationProvider(), new DimensionCalculator(), enableStickyHeader);
46+
this(adapter, new LayoutManagerOrientationProvider(), new DimensionCalculator(), enableStickyHeader);
4747
}
4848

4949
private StickyRecyclerHeadersDecoration(StickyRecyclerHeadersAdapter adapter, OrientationProvider orientationProvider, DimensionCalculator dimensionCalculator, boolean enableStickyHeader) {
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.timehop.stickyheadersrecyclerview.util;
2+
3+
import android.support.v7.widget.LinearLayoutManager;
4+
import android.support.v7.widget.RecyclerView;
5+
import android.support.v7.widget.StaggeredGridLayoutManager;
6+
7+
/**
8+
* OrientationProvider for ReyclerViews who use a LayoutManager
9+
*/
10+
public class LayoutManagerOrientationProvider implements OrientationProvider {
11+
12+
public static int getRecyclerViewOrientation(RecyclerView recyclerView) {
13+
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
14+
if (layoutManager instanceof LinearLayoutManager) {
15+
return ((LinearLayoutManager) layoutManager).getOrientation();
16+
} else if (layoutManager instanceof StaggeredGridLayoutManager) {
17+
return ((StaggeredGridLayoutManager) layoutManager).getOrientation();
18+
} else {
19+
throw new IllegalStateException("DividerDecoration can only be used with a valid LayoutManager: " + layoutManager.getClass().getSimpleName());
20+
}
21+
}
22+
23+
public boolean isRecyclerViewReverseLayout(RecyclerView recyclerView) {
24+
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
25+
if (layoutManager instanceof LinearLayoutManager) {
26+
return ((LinearLayoutManager) layoutManager).getReverseLayout();
27+
} else if (layoutManager instanceof StaggeredGridLayoutManager) {
28+
return ((StaggeredGridLayoutManager) layoutManager).getReverseLayout();
29+
} else {
30+
throw new IllegalStateException("DividerDecoration can only be used with a valid LayoutManager: " + layoutManager.getClass().getSimpleName());
31+
}
32+
}
33+
34+
@Override
35+
public int getOrientation(RecyclerView recyclerView) {
36+
return getRecyclerViewOrientation(recyclerView);
37+
}
38+
39+
@Override
40+
public boolean isReverseLayout(RecyclerView recyclerView) {
41+
return isRecyclerViewReverseLayout(recyclerView);
42+
}
43+
}

library/src/main/java/com/timehop/stickyheadersrecyclerview/util/LinearLayoutOrientationProvider.java

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

sample/src/main/java/com/timehop/stickyheadersrecyclerview/sample/DividerDecoration.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import android.support.v7.widget.RecyclerView;
1010
import android.view.View;
1111

12+
import com.timehop.stickyheadersrecyclerview.util.LayoutManagerOrientationProvider;
13+
1214

1315
public class DividerDecoration extends RecyclerView.ItemDecoration {
1416

@@ -29,14 +31,7 @@ public DividerDecoration(Context context) {
2931
}
3032

3133
private int getOrientation(RecyclerView parent) {
32-
LinearLayoutManager layoutManager;
33-
try {
34-
layoutManager = (LinearLayoutManager) parent.getLayoutManager();
35-
} catch (ClassCastException e) {
36-
throw new IllegalStateException("DividerDecoration can only be used with a " +
37-
"LinearLayoutManager.", e);
38-
}
39-
return layoutManager.getOrientation();
34+
return LayoutManagerOrientationProvider.getRecyclerViewOrientation(parent);
4035
}
4136

4237
@Override
@@ -58,8 +53,7 @@ public void drawVertical(Canvas c, RecyclerView parent) {
5853
final int childCount = parent.getChildCount();
5954
for (int i = 0; i < childCount; i++) {
6055
final View child = parent.getChildAt(i);
61-
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
62-
.getLayoutParams();
56+
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
6357
final int top = Math.max(recyclerViewTop, child.getBottom() + params.bottomMargin);
6458
final int bottom = Math.min(recyclerViewBottom, top + mDivider.getIntrinsicHeight());
6559
mDivider.setBounds(left, top, right, bottom);

sample/src/main/java/com/timehop/stickyheadersrecyclerview/sample/MainActivity.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
import android.os.Handler;
99
import android.os.Looper;
1010
import android.support.v7.app.AppCompatActivity;
11-
import android.support.v7.widget.GridLayoutManager;
1211
import android.support.v7.widget.LinearLayoutManager;
1312
import android.support.v7.widget.RecyclerView;
13+
import android.support.v7.widget.StaggeredGridLayoutManager;
1414
import android.text.TextUtils;
1515
import android.util.Log;
1616
import android.view.LayoutInflater;
@@ -68,7 +68,8 @@ public void run() {
6868

6969
// Set layout manager
7070
int orientation = getLayoutManagerOrientation(getResources().getConfiguration().orientation);
71-
final GridLayoutManager layoutManager = new GridLayoutManager(this, NUM_COLUMNS, orientation, isReverseButton.isChecked());
71+
final StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(NUM_COLUMNS, orientation);
72+
layoutManager.setReverseLayout(isReverseButton.isChecked());
7273
recyclerView.setLayoutManager(layoutManager);
7374

7475
// Add the sticky headers decoration

0 commit comments

Comments
 (0)