我们用到的控件是:XRecyclerContentLayout
但是发现该对象下的XRecyclerView.loadMoreCompleted()是私有的,如下:
private void loadMoreCompleted() {
if (loadMoreUIHandler != null) {
loadMoreUIHandler.onLoadFinish(totalPage > currentPage);
}
loadMore = false;
if (getStateCallback() != null) {
changeRefreshEnableState(true);
getStateCallback().notifyContent();
}
}
可以看到这里有一个很重要的属性totalPage(总页数),我这里没有设置loadMoreUIHandler对象的回调因此也不会进去onLoadFinish,我们就全局搜索看下totalPage的用处,看如下关键代码:
RecyclerView.OnScrollListener processMoreListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (adapter == null
|| recyclerView.getLayoutManager() == null
|| isRefresh) return;
int totalCount = adapter.getItemCount();
if (newState == RecyclerView.SCROLL_STATE_IDLE
&& !loadMore
&& getLastVisibleItemPosition(recyclerView.getLayoutManager()) + LOAD_MORE_ITEM_SLOP > totalCount) {
if (totalPage > currentPage) {
loadMore = true;
if (getOnRefreshAndLoadMoreListener() != null) {
getOnRefreshAndLoadMoreListener().onLoadMore(++currentPage);
changeRefreshEnableState(false);
if (loadMoreUIHandler != null) {
loadMoreUIHandler.onLoading();
}
}
} else {
loadMoreCompleted();
}
} else {
changeRefreshEnableState(true);
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
}
};
在totalPage <= currentPage的时候,会调用loadMoreCompleted方法,这就是关键了,因此我们需要做的就是在每一次加载更多请求的时候,设置totalPage 和currentPage方法即可让控件本身完成加载更多事件的触发与完成动作。
我的做法是:在每次请求回来之后重新设置一次xrcContent.getRecyclerView().setPage(currentPage,totalPage );
public void showData(int page, HuodongModel model) {
Log.e(TAG,"showData,page="+page);
if(model.getStatus_code()==200){
if(model.getData()!=null&&model.getData().size()>0){
if (page > 1) {
mMainListAdapter.addData(model.getData());
xrcContent.showContent();
} else {
mMainListAdapter.setData(model.getData());
}
//设置totalPage 和currentPage
xrcContent.getRecyclerView().setPage(page, page+1);
if (mMainListAdapter.getItemCount() < 1) {
xrcContent.showEmpty();
return;
}
}else{
//由于没有更多的数据了,设置totalPage 和currentPage为一样
xrcContent.getRecyclerView().setPage(page, page);
getvDelegate().toastShort("没有更多数据了");
}
}else{
getvDelegate().toastShort(model.getMessage());
}
}
至此,我们的加载更多就会自动触发加载更多与完成加载更多了!
效果图: