5
5
import android .graphics .Rect ;
6
6
import android .graphics .drawable .Drawable ;
7
7
import android .util .AttributeSet ;
8
- import android .util .Log ;
9
8
import android .view .MotionEvent ;
10
9
import android .view .View ;
11
10
import android .view .ViewGroup ;
25
24
import java .util .List ;
26
25
27
26
import static com .jcodecraeer .xrecyclerview .BaseRefreshHeader .STATE_DONE ;
27
+ import static com .jcodecraeer .xrecyclerview .BaseRefreshHeader .STATE_REFRESHING ;
28
28
29
29
public class XRecyclerView extends RecyclerView {
30
30
private boolean isLoadingData = false ;
@@ -452,11 +452,9 @@ void activeLoadMore() {
452
452
453
453
@ Override
454
454
public void onScrollStateChanged (int state ) {
455
- // Log.d(getClass().getSimpleName(), "onScrollStateChanged() called with: state = [" + state + "]");
456
455
super .onScrollStateChanged (state );
457
456
if (state == RecyclerView .SCROLL_STATE_IDLE && mLoadingListener != null && !isLoadingData && loadingMoreEnabled ) {
458
457
LayoutManager layoutManager = getLayoutManager ();
459
-
460
458
int lastVisibleItemPosition ;
461
459
if (layoutManager instanceof GridLayoutManager ) {
462
460
lastVisibleItemPosition = ((GridLayoutManager ) layoutManager ).findLastVisibleItemPosition ();
@@ -467,17 +465,29 @@ public void onScrollStateChanged(int state) {
467
465
} else {
468
466
lastVisibleItemPosition = ((LinearLayoutManager ) layoutManager ).findLastVisibleItemPosition ();
469
467
}
470
- int adjAdapterItemCount = layoutManager .getItemCount () + getHeaders_includingRefreshCount () + (pullRefreshEnabled ? 1 : 2 );
468
+ int adjAdapterItemCount = layoutManager .getItemCount () + getHeaders_includingRefreshCount ();
469
+ //Log.e("aaaaa","adjAdapterItemCount "+adjAdapterItemCount +" getItemCount "+layoutManager.getItemCount());
470
+
471
471
int status = STATE_DONE ;
472
+
472
473
if (mRefreshHeader != null )
473
474
status = mRefreshHeader .getState ();
474
- if (!isWrappedByScrollView
475
- && layoutManager .getChildCount () > 0
476
- && lastVisibleItemPosition >= adjAdapterItemCount - limitNumberToCallLoadMore
477
- && adjAdapterItemCount >= layoutManager .getChildCount ()
478
- && !isNoMore
479
- && status < ArrowRefreshHeader .STATE_REFRESHING ) {
480
- activeLoadMore ();
475
+ if (
476
+ layoutManager .getChildCount () > 0
477
+ && lastVisibleItemPosition >= adjAdapterItemCount - limitNumberToCallLoadMore
478
+ && adjAdapterItemCount >= layoutManager .getChildCount ()
479
+ && !isNoMore
480
+ && status < ArrowRefreshHeader .STATE_REFRESHING
481
+ ) {
482
+ isLoadingData = true ;
483
+ if (mFootView instanceof LoadingMoreFooter ) {
484
+ ((LoadingMoreFooter ) mFootView ).setState (LoadingMoreFooter .STATE_LOADING );
485
+ } else {
486
+ if (footerViewCallBack != null ) {
487
+ footerViewCallBack .onLoadingMore (mFootView );
488
+ }
489
+ }
490
+ mLoadingListener .onLoadMore ();
481
491
}
482
492
}
483
493
}
@@ -534,6 +544,11 @@ private boolean isOnTop() {
534
544
return mRefreshHeader .getParent () != null ;
535
545
}
536
546
547
+ public boolean isRefreshing () {
548
+ if (mRefreshHeader != null ) return mRefreshHeader .getState () == STATE_REFRESHING ;
549
+ return false ;
550
+ }
551
+
537
552
private class DataObserver extends RecyclerView .AdapterDataObserver {
538
553
@ Override
539
554
public void onChanged () {
@@ -632,11 +647,17 @@ public int getHeadersCount() {
632
647
@ Override
633
648
public RecyclerView .ViewHolder onCreateViewHolder (@ NonNull ViewGroup parent , int viewType ) {
634
649
if (viewType == TYPE_REFRESH_HEADER ) {
635
- return new SimpleViewHolder (mRefreshHeader );
650
+ SimpleViewHolder refreshHolder = new SimpleViewHolder (mRefreshHeader );
651
+ refreshHolder .setIsRecyclable (false );
652
+ return refreshHolder ;
636
653
} else if (isHeaderType (viewType )) {
637
- return new SimpleViewHolder (getHeaderViewByType (viewType ));
654
+ SimpleViewHolder headerHolder = new SimpleViewHolder (getHeaderViewByType (viewType ));
655
+ headerHolder .setIsRecyclable (false );
656
+ return headerHolder ;
638
657
} else if (viewType == TYPE_FOOTER ) {
639
- return new SimpleViewHolder (mFootView );
658
+ SimpleViewHolder footerHolder = new SimpleViewHolder (mFootView );
659
+ footerHolder .setIsRecyclable (false );
660
+ return footerHolder ;
640
661
}
641
662
return adapter .onCreateViewHolder (parent , viewType );
642
663
}
0 commit comments