0

我正在使用带有 loadmore 的 Superslim 库,但出现错误。我创建了一个 EndlessRecyclerOnScrollListener 类来加载更多,但它对我不起作用。

我使用以下方式调用它。

 mViews.mRecyclerView.addOnScrollListener(new EndlessRecyclerOnScrollListener(new LayoutManager(getActivity())) {
            @Override
            public void onLoadMore(int current_page) {
                if (skipItem == 0)
                    skipItem = 1 * current_page;
                else
                    skipItem = skipItem * current_page;

                new ServiceSync().execute("26", String.valueOf(skipItem));
            }
        });


 public abstract class EndlessRecyclerOnScrollListener extends RecyclerView.OnScrollListener {
        private int previousTotal = 0; // The total number of items in the dataset after the last load
        private boolean loading = true; // True if we are still waiting for the last set of data to load.
        private int visibleThreshold = 4; // The minimum amount of items to have below your current scroll position before loading more.
        int firstVisibleItem, visibleItemCount, totalItemCount;

        private int current_page = 1;

        private LayoutManager mlayoutManager;

        public EndlessRecyclerOnScrollListener(LayoutManager linearLayoutManager) {
            this.mlayoutManager =(LayoutManager) linearLayoutManager;
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);

            visibleItemCount = recyclerView.getChildCount();
            totalItemCount = mlayoutManager.getItemCount();
            firstVisibleItem = mlayoutManager.findFirstVisibleItemPosition();

            if (loading) {
                if (totalItemCount > previousTotal) {
                    loading = false;
                    previousTotal = totalItemCount;
                }
            }
            if (!loading && (totalItemCount - visibleItemCount)
                    <= (firstVisibleItem + visibleThreshold)) {
                // End has been reached
                // Do something here
                current_page++;
                loading = true;
            }
        }

        public abstract void onLoadMore(int current_page);
    }

错误日志:

 java.lang.NullPointerException at com.tonicartos.superslim.SectionData.<init>(SectionData.java:36)
 at com.tonicartos.superslim.LayoutManager.findFirstVisibleItem(LayoutManager.java:156)
 at com.tonicartos.superslim.LayoutManager.findFirstVisibleItemPosition(LayoutManager.java:187)
 at fourever.textile.notificationadapter.notifications$EndlessRecyclerOnScrollListener.onScrolled(notifications.java:235)
 at android.support.v7.widget.RecyclerView.dispatchOnScrolled(RecyclerView.java:3704)
 at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2947)
4

2 回答 2

1

这是我的 EndlessRecyclerOnScrollListener,工作正常:

@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    super.onScrolled(recyclerView, dx, dy);

    if(mLinearLayoutManager == null) return;

   int visibleItemCount = recyclerView.getChildCount();
   int totalItemCount = mLinearLayoutManager.getItemCount();
   int firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition();

    if (loading) {
        if (totalItemCount > previousTotal) {
            loading = false;
            previousTotal = totalItemCount;
        }
    }
    if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
        // End has been reached

        // Do something
        currentPage++;

        onLoadMore(currentPage);

        loading = true;
    }

    if (mLinearLayoutManager.findLastVisibleItemPosition() == totalItemCount - 1) {
        onEnd( totalItemCount );
    }

}
于 2016-03-23T14:08:09.130 回答
0

这是一个 LoadMoreRecyclerView 库

LoadMoreRecyclerView

    loadMoreRecyclerView.setOnLoadMoreListener(new LoadMoreRecyclerView.OnLoadMoreListener() {
        @Override
        public void onLoadMore() {
            // load data from background.
        }
    });
于 2016-05-25T16:16:46.840 回答