Skip to content

Commit 5229b27

Browse files
author
Chris Banes
committed
Fix #218.
Don't call Refresh Listener until we've finished scrolling
1 parent 60969e1 commit 5229b27

1 file changed

Lines changed: 41 additions & 18 deletions

File tree

library/src/com/handmark/pulltorefresh/library/PullToRefreshBase.java

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -347,22 +347,10 @@ public final boolean onTouchEvent(MotionEvent event) {
347347
if (mIsBeingDragged) {
348348
mIsBeingDragged = false;
349349

350-
if (mState == State.RELEASE_TO_REFRESH) {
351-
352-
if (null != mOnRefreshListener) {
353-
setState(State.REFRESHING, true);
354-
mOnRefreshListener.onRefresh(this);
355-
return true;
356-
357-
} else if (null != mOnRefreshListener2) {
358-
setState(State.REFRESHING, true);
359-
if (mCurrentMode == Mode.PULL_FROM_START) {
360-
mOnRefreshListener2.onPullDownToRefresh(this);
361-
} else if (mCurrentMode == Mode.PULL_FROM_END) {
362-
mOnRefreshListener2.onPullUpToRefresh(this);
363-
}
364-
return true;
365-
}
350+
if (mState == State.RELEASE_TO_REFRESH
351+
&& (null != mOnRefreshListener || null != mOnRefreshListener2)) {
352+
setState(State.REFRESHING, true);
353+
return true;
366354
}
367355

368356
// If we're already refreshing, just scroll back to the top
@@ -746,19 +734,31 @@ protected void onRefreshing(final boolean doScroll) {
746734

747735
if (doScroll) {
748736
if (mShowViewWhileRefreshing) {
737+
738+
// Call Refresh Listener when the Scroll has finished
739+
OnSmoothScrollFinishedListener listener = new OnSmoothScrollFinishedListener() {
740+
@Override
741+
public void onSmoothScrollFinished() {
742+
callRefreshListener();
743+
}
744+
};
745+
749746
switch (mCurrentMode) {
750747
case MANUAL_REFRESH_ONLY:
751748
case PULL_FROM_END:
752-
smoothScrollTo(getFooterSize());
749+
smoothScrollTo(getFooterSize(), listener);
753750
break;
754751
default:
755752
case PULL_FROM_START:
756-
smoothScrollTo(-getHeaderSize());
753+
smoothScrollTo(-getHeaderSize(), listener);
757754
break;
758755
}
759756
} else {
760757
smoothScrollTo(0);
761758
}
759+
} else {
760+
// We're not scrolling, so just call Refresh Listener now
761+
callRefreshListener();
762762
}
763763
}
764764

@@ -995,6 +995,17 @@ protected final void smoothScrollTo(int scrollValue) {
995995
smoothScrollTo(scrollValue, getPullToRefreshScrollDuration());
996996
}
997997

998+
/**
999+
* Smooth Scroll to position using the default duration of
1000+
* {@value #SMOOTH_SCROLL_DURATION_MS} ms.
1001+
*
1002+
* @param scrollValue - Position to scroll to
1003+
* @param listener - Listener for scroll
1004+
*/
1005+
protected final void smoothScrollTo(int scrollValue, OnSmoothScrollFinishedListener listener) {
1006+
smoothScrollTo(scrollValue, getPullToRefreshScrollDuration(), 0, listener);
1007+
}
1008+
9981009
/**
9991010
* Smooth Scroll to position using the longer default duration of
10001011
* {@value #SMOOTH_SCROLL_LONG_DURATION_MS} ms.
@@ -1047,6 +1058,18 @@ private void addRefreshableView(Context context, T refreshableView) {
10471058
LayoutParams.MATCH_PARENT));
10481059
}
10491060

1061+
private void callRefreshListener() {
1062+
if (null != mOnRefreshListener) {
1063+
mOnRefreshListener.onRefresh(this);
1064+
} else if (null != mOnRefreshListener2) {
1065+
if (mCurrentMode == Mode.PULL_FROM_START) {
1066+
mOnRefreshListener2.onPullDownToRefresh(this);
1067+
} else if (mCurrentMode == Mode.PULL_FROM_END) {
1068+
mOnRefreshListener2.onPullUpToRefresh(this);
1069+
}
1070+
}
1071+
}
1072+
10501073
@SuppressWarnings("deprecation")
10511074
private void init(Context context, AttributeSet attrs) {
10521075
switch (getPullToRefreshScrollDirection()) {

0 commit comments

Comments
 (0)