Skip to content

Commit 2a0840a

Browse files
calling setRecyclerView multiple times (for example when you need to change the data of the recyclerView, before calling notifyDataSetChanged) will now work without adding more listeners.
1 parent 872ac52 commit 2a0840a

File tree

7 files changed

+80
-96
lines changed

7 files changed

+80
-96
lines changed

app/app.iml

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,7 @@
1212
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
1313
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
1414
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
15-
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" />
16-
<option name="COMPILE_JAVA_TEST_TASK_NAME" value="compileDebugAndroidTestSources" />
1715
<afterSyncTasks>
18-
<task>generateDebugAndroidTestSources</task>
1916
<task>generateDebugSources</task>
2017
</afterSyncTasks>
2118
<option name="ALLOW_USER_CONFIGURATION" value="false" />
@@ -28,7 +25,7 @@
2825
</component>
2926
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
3027
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
31-
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/androidTest/debug" />
28+
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
3229
<exclude-output />
3330
<content url="file://$MODULE_DIR$">
3431
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
@@ -50,13 +47,27 @@
5047
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
5148
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
5249
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
50+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
51+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
52+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
53+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
54+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
55+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" />
56+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
5357
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
5458
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
5559
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
5660
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
5761
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
5862
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
5963
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
64+
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
65+
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
66+
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
67+
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
68+
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
69+
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
70+
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
6071
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
6172
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
6273
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
@@ -65,38 +76,25 @@
6576
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
6677
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
6778
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
68-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
69-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
70-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
71-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
72-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
73-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
74-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.0.1/jars" />
75-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/design/23.0.1/jars" />
76-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/23.0.1/jars" />
77-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.0.1/jars" />
79+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.1/jars" />
80+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/design/23.1.1/jars" />
81+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/23.1.1/jars" />
82+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.1.1/jars" />
7883
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
79-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
80-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
81-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
82-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
8384
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
84-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
85-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
86-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
85+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/mockable-android-23.jar" />
8786
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
8887
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
8988
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
9089
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
91-
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
9290
</content>
9391
<orderEntry type="jdk" jdkName="Android API 23 Platform" jdkType="Android SDK" />
9492
<orderEntry type="sourceFolder" forTests="false" />
95-
<orderEntry type="library" exported="" name="recyclerview-v7-23.0.1" level="project" />
96-
<orderEntry type="library" exported="" name="support-v4-23.0.1" level="project" />
97-
<orderEntry type="library" exported="" name="design-23.0.1" level="project" />
98-
<orderEntry type="library" exported="" name="appcompat-v7-23.0.1" level="project" />
99-
<orderEntry type="library" exported="" name="support-annotations-23.0.1" level="project" />
93+
<orderEntry type="library" exported="" name="recyclerview-v7-23.1.1" level="project" />
94+
<orderEntry type="library" exported="" name="support-v4-23.1.1" level="project" />
95+
<orderEntry type="library" exported="" name="support-annotations-23.1.1" level="project" />
96+
<orderEntry type="library" exported="" name="appcompat-v7-23.1.1" level="project" />
97+
<orderEntry type="library" exported="" name="design-23.1.1" level="project" />
10098
<orderEntry type="module" module-name="library" exported="" />
10199
</component>
102100
</module>

app/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apply plugin: 'com.android.application'
22

33
android {
44
compileSdkVersion 23
5-
buildToolsVersion "23.0.1"
5+
buildToolsVersion "23.0.2"
66

77
defaultConfig {
88
applicationId "com.lb.lollipopcontactsrecyclerviewfastscroller"
@@ -21,8 +21,8 @@ android {
2121

2222
dependencies {
2323
compile fileTree(dir: 'libs', include: ['*.jar'])
24-
compile 'com.android.support:recyclerview-v7:23.0.1'
25-
compile 'com.android.support:appcompat-v7:23.0.1'
26-
compile 'com.android.support:design:23.0.1'
24+
compile 'com.android.support:recyclerview-v7:23.1.1'
25+
compile 'com.android.support:appcompat-v7:23.1.1'
26+
compile 'com.android.support:design:23.1.1'
2727
compile project(':library')
2828
}

library/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apply plugin: 'com.github.dcendents.android-maven'
33

44
android {
55
compileSdkVersion 23
6-
buildToolsVersion "23.0.1"
6+
buildToolsVersion "23.0.2"
77

88
defaultConfig {
99
minSdkVersion 11
@@ -21,6 +21,6 @@ android {
2121

2222
dependencies {
2323
compile fileTree(dir: 'libs', include: ['*.jar'])
24-
compile 'com.android.support:appcompat-v7:23.0.1'
25-
compile 'com.android.support:recyclerview-v7:23.0.1'
24+
compile 'com.android.support:appcompat-v7:23.1.1'
25+
compile 'com.android.support:recyclerview-v7:23.1.1'
2626
}

library/library.iml

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,7 @@
1212
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
1313
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
1414
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
15-
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" />
16-
<option name="COMPILE_JAVA_TEST_TASK_NAME" value="compileDebugAndroidTestSources" />
1715
<afterSyncTasks>
18-
<task>generateDebugAndroidTestSources</task>
1916
<task>generateDebugSources</task>
2017
</afterSyncTasks>
2118
<option name="ALLOW_USER_CONFIGURATION" value="false" />
@@ -29,7 +26,7 @@
2926
</component>
3027
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
3128
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
32-
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/androidTest/debug" />
29+
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
3330
<exclude-output />
3431
<content url="file://$MODULE_DIR$">
3532
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
@@ -51,36 +48,42 @@
5148
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
5249
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
5350
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
51+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
52+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
53+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
54+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
55+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
56+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" />
57+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
5458
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
5559
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
5660
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
5761
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
5862
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
5963
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
6064
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
65+
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
66+
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
67+
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
68+
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
69+
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
70+
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
71+
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
6172
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
6273
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
6374
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
6475
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
6576
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
6677
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
6778
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
79+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" />
6880
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
6981
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
7082
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
71-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
7283
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
73-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
74-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
7584
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
76-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
77-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
78-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
7985
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
80-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
81-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
82-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
83-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
86+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/mockable-android-23.jar" />
8487
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
8588
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
8689
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
@@ -89,9 +92,9 @@
8992
</content>
9093
<orderEntry type="jdk" jdkName="Android API 23 Platform" jdkType="Android SDK" />
9194
<orderEntry type="sourceFolder" forTests="false" />
92-
<orderEntry type="library" exported="" name="recyclerview-v7-23.0.1" level="project" />
93-
<orderEntry type="library" exported="" name="support-v4-23.0.1" level="project" />
94-
<orderEntry type="library" exported="" name="appcompat-v7-23.0.1" level="project" />
95-
<orderEntry type="library" exported="" name="support-annotations-23.0.1" level="project" />
95+
<orderEntry type="library" exported="" name="recyclerview-v7-23.1.1" level="project" />
96+
<orderEntry type="library" exported="" name="support-v4-23.1.1" level="project" />
97+
<orderEntry type="library" exported="" name="support-annotations-23.1.1" level="project" />
98+
<orderEntry type="library" exported="" name="appcompat-v7-23.1.1" level="project" />
9699
</component>
97100
</module>

library/src/androidTest/java/com/lb/recyclerview_fast_scroller/ApplicationTest.java

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

library/src/main/java/com/lb/recyclerview_fast_scroller/RecyclerViewFastScroller.java

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class RecyclerViewFastScroller extends LinearLayout {
2828
private int height;
2929
private boolean isInitialized = false;
3030
private ObjectAnimator currentAnimator = null;
31-
31+
3232
private final RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
3333
@Override
3434
public void onScrolled(final RecyclerView recyclerView, final int dx, final int dy) {
@@ -110,28 +110,39 @@ public boolean onTouchEvent(@NonNull MotionEvent event) {
110110
}
111111

112112
public void setRecyclerView(final RecyclerView recyclerView) {
113-
this.recyclerView = recyclerView;
114-
recyclerView.addOnScrollListener(onScrollListener);
115-
recyclerView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
116-
@Override
117-
public boolean onPreDraw() {
118-
recyclerView.getViewTreeObserver().removeOnPreDrawListener(this);
119-
if (bubble == null || handle.isSelected())
113+
if (this.recyclerView != recyclerView) {
114+
if (this.recyclerView != null)
115+
this.recyclerView.removeOnScrollListener(onScrollListener);
116+
this.recyclerView = recyclerView;
117+
if (this.recyclerView == null)
118+
return;
119+
recyclerView.addOnScrollListener(onScrollListener);
120+
}
121+
if (recyclerView != null) {
122+
final ViewTreeObserver viewTreeObserver = recyclerView.getViewTreeObserver();
123+
viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
124+
@Override
125+
public boolean onPreDraw() {
126+
viewTreeObserver.removeOnPreDrawListener(this);
127+
if (bubble == null || handle.isSelected())
128+
return true;
129+
final int verticalScrollOffset = recyclerView.computeVerticalScrollOffset();
130+
final int verticalScrollRange = recyclerView.computeVerticalScrollRange();
131+
float proportion = (float) verticalScrollOffset / ((float) verticalScrollRange - height);
132+
setBubbleAndHandlePosition(height * proportion);
120133
return true;
121-
final int verticalScrollOffset = recyclerView.computeVerticalScrollOffset();
122-
final int verticalScrollRange = recyclerView.computeVerticalScrollRange();
123-
float proportion = (float) verticalScrollOffset / ((float) verticalScrollRange - height);
124-
setBubbleAndHandlePosition(height * proportion);
125-
return true;
126-
}
127-
});
134+
}
135+
});
136+
}
128137
}
129138

130139
@Override
131140
protected void onDetachedFromWindow() {
132141
super.onDetachedFromWindow();
133-
if (recyclerView != null)
142+
if (recyclerView != null) {
134143
recyclerView.removeOnScrollListener(onScrollListener);
144+
recyclerView = null;
145+
}
135146
}
136147

137148
private void setRecyclerViewPosition(float y) {

library/src/test/java/com/lb/lollipop_contacts_recyclerview_fast_scroller/ExampleUnitTest.java

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

0 commit comments

Comments
 (0)