RecyclerView getChildCount () and getItemCount () returns the same value

RecyclerView has an InfiniteScrollListener and inside this listener, in the OnScrolled() method, I calculate the visible and total number of elements to check whether new elements should be loaded. When totalItemCount and visibleItemCount are the same, this causes an endless load cycle. The listener works flawlessly with my other RecyclerView , which does NOT have a CoordinatorLayout or NestedScrollView as a parent. I want to keep this structure because the client will not accept the change.

I have a fragment inside an action that has a layout like this

 CoordinatorLayout{ NestedScrollView{ RecyclerView{ } } } 

sdk versions

 compileSdkVersion 24 buildToolsVersion "23.0.3" ... minSdkVersion 21 targetSdkVersion 24 

fragment_profile.xml as a parent layout

 <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay" app:layout_behavior="com.paxotic.paxira.util.behavior.AppBarFlingBehavior"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/toolbar_layout" android:layout_width="match_parent" android:layout_height="@dimen/app_bar_height_small" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000000" app:layout_collapseMode="parallax"> <ImageView android:id="@+id/img_background" android:layout_width="match_parent" android:layout_height="match_parent" android:alpha="0.5" android:scaleType="centerCrop" tools:src="@drawable/bg_greeting_activity" /> </RelativeLayout> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <include layout="@layout/activity_profile_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> <android.support.design.widget.FloatingActionButton ... /> </android.support.design.widget.CoordinatorLayout> 

fragment_profile.xml as a child layout

 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> ... <android.support.v7.widget.RecyclerView android:id="@+id/feedRecycler" android:layout_width="match_parent" android:layout_height="match_parent" android:clipToPadding="false" android:paddingBottom="@dimen/spacing_normal" tools:listitem="@layout/list_item_activity" /> ... </android.support.v4.widget.NestedScrollView> 

ProfileFragment.java: relative function

 private void init() { feedAdapter = new FeedAdapter(host); feedAdapter.setHasStableIds(true); LinearLayoutManager layoutManager = new LinearLayoutManager(host); feedRecycler.setLayoutManager(layoutManager); feedRecycler.setNestedScrollingEnabled(false); feedRecycler.setHasFixedSize(true); feedRecycler.setAdapter(feedAdapter); infiniteScrollListener = new InfiniteScrollListener(host, layoutManager) { @Override public void onLoadMore(int pageIndex) { if (!feedAdapter.isLoading) { loadFeed(pageIndex); } } }; feedRecycler.addOnScrollListener(infiniteScrollListener); } 

InfiniteScrollListener.java

 public abstract class InfiniteScrollListener extends RecyclerView.OnScrollListener { private int previousTotal = 0; // The total number of items in the dataset after the last load private boolean loading = false; // True if we are still waiting for the last set of data to load. private static final int VISIBLE_THRESHOLD = 5; // The minimum amount of items to have below your current scroll position before loading more. int firstVisibleItem, visibleItemCount, totalItemCount; private int current_page = 0; private int loadingItemCount; private LinearLayoutManager mLinearLayoutManager; public InfiniteScrollListener(Context context, LinearLayoutManager linearLayoutManager) { this.mLinearLayoutManager = linearLayoutManager; loadingItemCount = context.getResources().getInteger(R.integer.feed_pull_item_count); } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); if (dy < 0) return; // check for scroll down visibleItemCount = mLinearLayoutManager.getChildCount(); totalItemCount = mLinearLayoutManager.getItemCount(); firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition(); synchronized (this) { if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + VISIBLE_THRESHOLD)) { // End has been reached, Do something current_page++; onLoadMore(current_page); loading = true; } } } public abstract void onLoadMore(int current_page); public void setLoading(boolean loading) { this.loading = loading; } @Override public void onScrollStateChanged(RecyclerView view, int scrollState) { // Don't take any action on changed } } 
+8
java android android-studio infinite-scroll
source share

No one has answered this question yet.

See similar questions:

45
How to place a RecyclerView inside a NestedScrollView?

or similar:

6170
Is Java pass-by-reference or pass-by-value?
2171
How to determine if an array contains a specific value in Java?
1818
How to get enum value from string value in Java?
1544
Sort map <Key, value> by value
1492
Does Java support default parameter values?
935
Cannot start Eclipse - Java was started, but returned exit code = 13
877
Why doesn't RecyclerView have onItemClickListener ()?
868
How to add separators and spaces between elements in RecyclerView?
782
How to create a RecyclerView with multiple view types?
511
RecyclerView onClick

All Articles