@@ -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