我正在使用带有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)
答案 0 :(得分: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 );
}
}
答案 1 :(得分:0)
这是一个LoadMoreRecyclerView库
loadMoreRecyclerView.setOnLoadMoreListener(new LoadMoreRecyclerView.OnLoadMoreListener() {
@Override
public void onLoadMore() {
// load data from background.
}
});