diff --git a/library/src/main/java/com/eowise/recyclerview/stickyheaders/StickyHeadersItemDecoration.java b/library/src/main/java/com/eowise/recyclerview/stickyheaders/StickyHeadersItemDecoration.java
index 2e286a1..1271821 100644
--- a/library/src/main/java/com/eowise/recyclerview/stickyheaders/StickyHeadersItemDecoration.java
+++ b/library/src/main/java/com/eowise/recyclerview/stickyheaders/StickyHeadersItemDecoration.java
@@ -53,7 +53,7 @@ public void onDrawOver(Canvas c, RecyclerView parent) {
for (int i = childCount - 1; i >= 0; i--) {
final View child = parent.getChildAt(i);
final RecyclerView.ViewHolder itemViewHolder = parent.getChildViewHolder(child);
- currentHeaderId = getHeaderId(itemViewHolder);
+ currentHeaderId = getHeaderId(itemViewHolder, itemViewHolder.getPosition());
if (i == 0 || !currentHeaderId.equals(getHeaderId(parent, i - 1))) {
@@ -78,7 +78,7 @@ public void onDrawOver(Canvas c, RecyclerView parent) {
@Override
public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
- if (itemPosition != 0 && getHeaderId(parent.findViewHolderForPosition(itemPosition)) == getHeaderId(parent.findViewHolderForPosition(itemPosition - 1))) {
+ if (itemPosition != 0 && getHeaderId(parent.findViewHolderForPosition(itemPosition), itemPosition) == getHeaderId(parent.findViewHolderForPosition(itemPosition - 1), itemPosition)) {
outRect.set(0, 0, 0, 0);
}
else {
@@ -125,15 +125,15 @@ private long getHeaderId(RecyclerView parent, int childPosition) {
final View child = parent.getChildAt(childPosition);
final RecyclerView.ViewHolder itemViewHolder = parent.getChildViewHolder(child);
- return getHeaderId(itemViewHolder);
+ return getHeaderId(itemViewHolder, itemViewHolder.getPosition());
}
- private long getHeaderId(RecyclerView.ViewHolder itemViewHolder) {
- if (!headersIds.containsKey(itemViewHolder.getPosition())) {
+ private long getHeaderId(RecyclerView.ViewHolder itemViewHolder, int dataSetPosition) {
+ if (!headersIds.containsKey(dataSetPosition)) {
headersIds.put(itemViewHolder.getPosition(), adapter.getHeaderId(itemViewHolder, itemViewHolder.getPosition()));
}
- return headersIds.get(itemViewHolder.getPosition());
+ return headersIds.get(dataSetPosition);
}
}
diff --git a/samples/build.gradle b/samples/build.gradle
new file mode 100644
index 0000000..0563b2b
--- /dev/null
+++ b/samples/build.gradle
@@ -0,0 +1,13 @@
+apply plugin: 'com.android.application'
+
+
+dependencies {
+ compile project(':library')
+ compile 'com.android.support:recyclerview-v7:+'
+ compile 'com.android.support:appcompat-v7:20.+'
+}
+
+android {
+ compileSdkVersion 'android-L'
+ buildToolsVersion '20.0.0'
+}
\ No newline at end of file
diff --git a/samples/src/main/AndroidManifest.xml b/samples/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..bc30a5c
--- /dev/null
+++ b/samples/src/main/AndroidManifest.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/src/main/java/com/eowise/recyclerview/stickyheaders/samples/MainActivity.java b/samples/src/main/java/com/eowise/recyclerview/stickyheaders/samples/MainActivity.java
new file mode 100644
index 0000000..28dee07
--- /dev/null
+++ b/samples/src/main/java/com/eowise/recyclerview/stickyheaders/samples/MainActivity.java
@@ -0,0 +1,32 @@
+package com.eowise.recyclerview.stickyheaders.samples;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+
+import com.eowise.recyclerview.stickyheaders.HeaderPosition;
+import com.eowise.recyclerview.stickyheaders.StickyHeadersItemDecoration;
+import com.eowise.recyclerview.stickyheaders.samples.adapters.PersonAdapter;
+import com.eowise.recyclerview.stickyheaders.samples.adapters.PersonInitialAdapter;
+
+/**
+ * Created by aurel on 22/09/14.
+ */
+public class MainActivity extends Activity {
+
+ private RecyclerView list;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.activity_main);
+
+ list = (RecyclerView)findViewById(R.id.list);
+
+ list.setAdapter(new PersonAdapter());
+ list.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
+ list.addItemDecoration(new StickyHeadersItemDecoration(new PersonInitialAdapter(), list, HeaderPosition.OVERLAY));
+ }
+}
diff --git a/samples/src/main/java/com/eowise/recyclerview/stickyheaders/samples/adapters/PersonAdapter.java b/samples/src/main/java/com/eowise/recyclerview/stickyheaders/samples/adapters/PersonAdapter.java
new file mode 100644
index 0000000..bc26843
--- /dev/null
+++ b/samples/src/main/java/com/eowise/recyclerview/stickyheaders/samples/adapters/PersonAdapter.java
@@ -0,0 +1,246 @@
+package com.eowise.recyclerview.stickyheaders.samples.adapters;
+
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.eowise.recyclerview.stickyheaders.samples.R;
+
+/**
+ * Created by aurel on 22/09/14.
+ */
+public class PersonAdapter extends RecyclerView.Adapter {
+
+ String[] items = {
+ "Abram Tavernia",
+ "Alexa Oquin",
+ "Alvin Lainez",
+ "Alyce Rakestraw",
+ "Angel Scruggs",
+ "Annabel Wardle",
+ "Ardella Hollinger",
+ "Arlean Drewes",
+ "Armida Carasco",
+ "Asa Modeste",
+ "Ashlea Aguillard",
+ "Aurore Maris",
+ "Bao Godbold",
+ "Bettye Wenger",
+ "Bill Thatch",
+ "Brad Amis",
+ "Bridget Goulette",
+ "Bryan Rarick",
+ "Camie Malcolm",
+ "Caridad Nesbitt",
+ "Carleen Maul",
+ "Carmelo Ehrmann",
+ "Caroll Ruben",
+ "Cherryl Suter",
+ "Christeen Bonner",
+ "Christene Thrailkill",
+ "Cindie Luong",
+ "Claudio Llanos",
+ "Cleveland Selvage",
+ "Clint Cullen",
+ "Clora Graybeal",
+ "Cristin Culton",
+ "Crysta Bolt",
+ "Cuc Hetzel",
+ "Daine Cumbie",
+ "Danuta Villalta",
+ "Darci Quick",
+ "Darius Hermes",
+ "Delaine Evins",
+ "Delpha Godin",
+ "Dexter Bencomo",
+ "Dione Rhines",
+ "Donella Blumstein",
+ "Dorene Kisling",
+ "Dudley Benavides",
+ "Dulce Demille",
+ "Ebonie Wallis",
+ "Effie Wiley",
+ "Elayne Munro",
+ "Elisha Funches",
+ "Elna Padua",
+ "Emmy Denk",
+ "Farrah Delosantos",
+ "Frieda Buesing",
+ "Gilda Tse",
+ "Gina Dufault",
+ "Giovanna Schepis",
+ "Glayds Mcguigan",
+ "Glinda Dunagan",
+ "Gwenda Fraser",
+ "Hai Oday",
+ "Halley Holscher",
+ "Hellen Baillie",
+ "Herbert Renninger",
+ "Hobert Yopp",
+ "Hollis Haubert",
+ "Hui Lupien",
+ "Ileen Mccasland",
+ "Imelda Moser",
+ "Ione Littlewood",
+ "Jacalyn Gressett",
+ "Jacquelyn Butter",
+ "Jade Churchwell",
+ "Jami Selph",
+ "Janeth Ringwood",
+ "Jeffry Carcamo",
+ "Jerlene Zellers",
+ "Jerome Tomko",
+ "Jerrod Rother",
+ "Jettie Conner",
+ "Joaquin Keplinger",
+ "Joette Healey",
+ "Jorge Molina",
+ "Juana Olds",
+ "Jules Friley",
+ "Julio Krier",
+ "Kareen Bergey",
+ "Katharyn Doten",
+ "Katherine Ragsdale",
+ "Kathryn Edgington",
+ "Katia Hock",
+ "Keeley Pass",
+ "Kendrick Moncada",
+ "Kenyetta Wick",
+ "Kimber Boulware",
+ "Kitty Manthe",
+ "Kristan Blake",
+ "Lakeisha Medlin",
+ "Lakesha Voth",
+ "Lanora Pair",
+ "Lashon Abramson",
+ "Laurie Campa",
+ "Laurinda Barcus",
+ "Lavern Puig",
+ "Lera Mckibben",
+ "Long Show",
+ "Louanne Garling",
+ "Louella Petillo",
+ "Lucinda Sockwell",
+ "Lyla Fitzsimons",
+ "Mackenzie Ooten",
+ "Malia Claiborne",
+ "Manie Yarberry",
+ "Marchelle Halcomb",
+ "Marcie Augusta",
+ "Marguerita Tenaglia",
+ "Mari Sheperd",
+ "Mariela Ruggieri",
+ "Marielle Connolly",
+ "Marilyn Franck",
+ "Marisol Marmolejo",
+ "Marth Pitchford",
+ "Marty Cobey",
+ "Maximo Thornburg",
+ "Meggan Plumadore",
+ "Mellissa Schnitzer",
+ "Melodie Kitch",
+ "Mimi File",
+ "Mina Nolte",
+ "Mira Archuleta",
+ "Modesto Higgenbotham",
+ "Mohammed Orr",
+ "Morgan Maddy",
+ "Morgan Mensch",
+ "Moriah Grubb",
+ "Nedra Dyson",
+ "Norene Nelms",
+ "Odis Mill",
+ "Ok Hutter",
+ "Olin Bolander",
+ "Otilia Dejulio",
+ "Otis Shore",
+ "Patrina Crystal",
+ "Philip Wengert",
+ "Porter Ketner",
+ "Rhiannon Lavoie",
+ "Richard Domingues",
+ "Rochell Molock",
+ "Rosalva Gutman",
+ "Rosalyn Pesce",
+ "Rosaria Rosengarten",
+ "Roxane Clayborn",
+ "Rozanne Mahaney",
+ "Sal Wilkinson",
+ "Saundra Lundahl",
+ "Scotty Ralph",
+ "Seema Boots",
+ "Selena Eisenhower",
+ "Shae Hellard",
+ "Shae Latz",
+ "Shantay Wilcox",
+ "Shawnda Kees",
+ "Shayne Cutler",
+ "Shenita Cassette",
+ "Sherie Culp",
+ "Sherrie Poole",
+ "Shirley Cliett",
+ "Shizue Alcaraz",
+ "Sid Streets",
+ "Stacia Twellman",
+ "Stasia Slay",
+ "Stephen Eagles",
+ "Svetlana Hallam",
+ "Tambra Buchner",
+ "Tamie Branham",
+ "Tammera Hutt",
+ "Tawanna Rameriz",
+ "Tawna Seim",
+ "Terisa Whitbeck",
+ "Terresa Brantley",
+ "Terri Barnaby",
+ "Tinisha Gammill",
+ "Todd Netter",
+ "Toshiko Skowron",
+ "Traci Schurr",
+ "Trish Perino",
+ "Tyesha Bruemmer",
+ "Valda Skyles",
+ "Vella Montilla",
+ "Venita Richarson",
+ "Vera Noffsinger",
+ "Vinnie Gobeil",
+ "Waltraud Nelsen",
+ "Wendy Zachery",
+ "Willard Qualls",
+ "Willetta Zucker",
+ "Yen Staton",
+ "Yolonda Hadnott",
+ "Yoshie Califano",
+ "Yu Schilke"
+ };
+
+ @Override
+ public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
+ View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, viewGroup, false);
+
+ return new ViewHolder(itemView);
+
+ }
+
+ @Override
+ public void onBindViewHolder(ViewHolder viewHolder, int position) {
+ viewHolder.label.setText(items[position]);
+ }
+
+ @Override
+ public int getItemCount() {
+ return items.length;
+ }
+
+ public static class ViewHolder extends RecyclerView.ViewHolder {
+
+ TextView label;
+
+ public ViewHolder(View itemView) {
+ super(itemView);
+ label = (TextView) itemView.findViewById(R.id.name);
+ }
+ }
+}
diff --git a/samples/src/main/java/com/eowise/recyclerview/stickyheaders/samples/adapters/PersonInitialAdapter.java b/samples/src/main/java/com/eowise/recyclerview/stickyheaders/samples/adapters/PersonInitialAdapter.java
new file mode 100644
index 0000000..7ef5d43
--- /dev/null
+++ b/samples/src/main/java/com/eowise/recyclerview/stickyheaders/samples/adapters/PersonInitialAdapter.java
@@ -0,0 +1,43 @@
+package com.eowise.recyclerview.stickyheaders.samples.adapters;
+
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.eowise.recyclerview.stickyheaders.StickyHeadersAdapter;
+import com.eowise.recyclerview.stickyheaders.samples.R;
+
+/**
+ * Created by aurel on 23/09/14.
+ */
+public class PersonInitialAdapter implements StickyHeadersAdapter {
+
+ @Override
+ public ViewHolder onCreateViewHolder(ViewGroup parent) {
+ View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.letter_header, parent, false);
+
+ return new ViewHolder(itemView);
+ }
+
+ @Override
+ public void onBindViewHolder(ViewHolder headerViewHolder, PersonAdapter.ViewHolder itemViewHolder, int position) {
+ headerViewHolder.letter.setText(itemViewHolder.label.getText().subSequence(0, 1));
+ }
+
+ @Override
+ public long getHeaderId(PersonAdapter.ViewHolder viewHolder, int position) {
+ return viewHolder.label.getText().charAt(0);
+ }
+
+ public static class ViewHolder extends RecyclerView.ViewHolder {
+
+ TextView letter;
+
+ public ViewHolder(View itemView) {
+ super(itemView);
+ letter = (TextView) itemView.findViewById(R.id.letter);
+ }
+ }
+}
diff --git a/samples/src/main/res/drawable-hdpi/ic_launcher.png b/samples/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..0e79b18
Binary files /dev/null and b/samples/src/main/res/drawable-hdpi/ic_launcher.png differ
diff --git a/samples/src/main/res/drawable-mdpi/ic_launcher.png b/samples/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..1183441
Binary files /dev/null and b/samples/src/main/res/drawable-mdpi/ic_launcher.png differ
diff --git a/samples/src/main/res/drawable-xhdpi/ic_launcher.png b/samples/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..c8ab2a1
Binary files /dev/null and b/samples/src/main/res/drawable-xhdpi/ic_launcher.png differ
diff --git a/samples/src/main/res/layout/activity_main.xml b/samples/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..5f99315
--- /dev/null
+++ b/samples/src/main/res/layout/activity_main.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/src/main/res/layout/letter_header.xml b/samples/src/main/res/layout/letter_header.xml
new file mode 100644
index 0000000..6af6fce
--- /dev/null
+++ b/samples/src/main/res/layout/letter_header.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/samples/src/main/res/layout/list_item.xml b/samples/src/main/res/layout/list_item.xml
new file mode 100644
index 0000000..10ada46
--- /dev/null
+++ b/samples/src/main/res/layout/list_item.xml
@@ -0,0 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/samples/src/main/res/values/dimens.xml b/samples/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..93ba2ab
--- /dev/null
+++ b/samples/src/main/res/values/dimens.xml
@@ -0,0 +1,5 @@
+
+
+ 16dp
+ 72dp
+
\ No newline at end of file
diff --git a/samples/src/main/res/values/strings.xml b/samples/src/main/res/values/strings.xml
new file mode 100644
index 0000000..5add872
--- /dev/null
+++ b/samples/src/main/res/values/strings.xml
@@ -0,0 +1,4 @@
+
+
+ Sticky headers Samples
+
\ No newline at end of file
diff --git a/samples/src/main/res/values/styles.xml b/samples/src/main/res/values/styles.xml
new file mode 100644
index 0000000..4dd4c5d
--- /dev/null
+++ b/samples/src/main/res/values/styles.xml
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index 64e1816..4c952a1 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1,2 @@
-include 'library'
\ No newline at end of file
+include 'library'
+include 'samples'
\ No newline at end of file