Here is the proper way to paginate with StaggeredGridLayoutManager.
The only difference is in findFirstVisibleItemPositions(), which returns an int[] for the first visible position in each span.
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
    }
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        int visibleItemCount = mGridLayoutManager.getChildCount();
        int totalItemCount = mGridLayoutManager.getItemCount();
        int[] firstVisibleItemPositions = mGridLayoutManager.findFirstVisibleItemPositions(null);
        if (!mIsLoading && !mIsLastPage) {
            if ((firstVisibleItemPositions[0] + visibleItemCount) >= totalItemCount
                && firstVisibleItemPositions[0] >= 0
                && totalItemCount >= Config.PAGE_SIZE) {
                loadMorePosts();
            }
        }
    }
});