Pagination not working after opening an item in recyclerview - Android

Viewed 209

I'm trying to add pagination to a fragment (consisting recyclerview) which is inside a viewpager. It works perfectly.

Case: I click on any item (which opens an activity i.e. a detailView) but after going back from detailView to fragment consisting recyclerview the pagination stops working.

Fragment code

private int pageNumber = 1;

On oncreateview

   sharedPreferenceUtil.setStringPreference(Constants.TEMPPAGENO, "1");

onScroll listener:

    private RecyclerView.OnScrollListener recyclerViewOnScrollListener = new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
        RecyclerView.Adapter adapter = recyclerView.getAdapter();
        if (layoutManager.getChildCount() > 0) {
            // Calculations..
            int indexOfLastItemViewVisible = layoutManager.getChildCount() - 1;

            View lastItemViewVisible = layoutManager.getChildAt(indexOfLastItemViewVisible);

            int adapterPosition = layoutManager.getPosition(lastItemViewVisible);

            boolean isLastItemVisible = (adapterPosition == adapter.getItemCount() - 1);

            if (!postType.equals("bookmark") && isLastItemVisible && !isLoading && !allDone) {
                pageNumber++;
                discoverRecyclerAdapter.showLoading();
                loadPosts();

                sharedPreferenceUtil.setStringPreference(Constants.TEMPPAGENO, String.valueOf(pageNumber));

            }
        }

    }
};

loadposts function

private void loadPosts() {

    if (postType != null && mContext != null) {
        if (postType.equals("bookmark")) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (discoverRecyclerAdapter.isLoaderShowing())
                        discoverRecyclerAdapter.hideLoading();
                    if (swipeRefreshLayout.isRefreshing())
                        swipeRefreshLayout.setRefreshing(false);

                    discoverRecyclerAdapter.addItemsAtBottom(bookmarkedPosts);
                    if (bookmarkedPosts.isEmpty()) {
                        recyclerView.setVisibility(View.GONE);
                        emptyView.setVisibility(View.VISIBLE);
                    }
                }
            }, 200);
        } else {
            isLoading = true;
            if (TextUtils.isEmpty(userId))
                getPosts = weService.getPosts(sharedPreferenceUtil.getStringPreference(Constants.KEY_API_KEY, null), postType.equals("hot") ? 1 : 0, pageNumber);
            else
                getPosts = weService.getPostsByUserId(sharedPreferenceUtil.getStringPreference(Constants.KEY_API_KEY, null), userId, postType.equals("hot") ? 1 : 0, pageNumber);
            getPosts.enqueue(callBack);
        }
    }
}

On onResume (Fragment)

pageNumber = Integer.parseInt(sharedPreferenceUtil.getStringPreference(Constants.TEMPPAGENO, String.valueOf(pageNumber)));
pageNumber++;
discoverRecyclerAdapter.showLoading();
loadPosts();

On onStop (Fragment)

@Override
public void onStop() {
    super.onStop();
    recyclerView.removeOnScrollListener(recyclerViewOnScrollListener);
    if (getPosts != null && !getPosts.isCanceled())
        getPosts.cancel();
}

On onPause (Fragment)

@Override
public void onPause() {
    super.onPause();
    LocalBroadcastManager.getInstance(mContext).unregisterReceiver(postEventReceiver);
    LocalBroadcastManager.getInstance(mContext).unregisterReceiver(profileEventReceiver);
}
1 Answers

Since you are removing the onScrollListener in onStop you should add it back in onStart()

@Override
public void onStart() {
    recyclerView.addOnScrollListener(recyclerViewOnScrollListener);
    ...
}
Related