package starter.kit.util; import java.util.ArrayList; import rx.functions.Action1; import starter.kit.model.entity.Entity; public class RxPager implements RxRequestKey { private final int startPage; // 第一页 private int nextPage; // 下一页 private final int pageSize; // 每次请求数据大小 private int requested = NOT_REQUESTED; // 已请求数据 private int size = 0; // 当前总共接收数据 private boolean hasMoreData; private boolean isLoading; private Action1<RxPager> onRequest; public RxPager(int startPage, int pageSize, Action1<RxPager> onRequest) { this.startPage = startPage; this.pageSize = pageSize; this.onRequest = onRequest; this.nextPage = startPage; this.hasMoreData = true; this.isLoading = true; } @Override public void received(ArrayList<? extends Entity> items) { isLoading = false; final int itemCount = items.size(); hasMoreData = itemCount >= pageSize; size += itemCount; requested += itemCount; if (hasMoreData()) { nextPage = size / pageSize + startPage; } } @Override public void next() { if (hasMoreData()) { isLoading = true; onRequest.call(this); } } @Override public void reset() { size = 0; nextPage = startPage; isLoading = true; hasMoreData = true; requested = NOT_REQUESTED; } @Override public boolean hasMoreData() { return hasMoreData && size % pageSize == 0; } @Override public String nextKey() { return String.valueOf(nextPage); } @Override public String previousKey() { return String.valueOf(startPage); } @Override public int pageSize() { return pageSize; } @Override public boolean isFirstPage() { return nextPage == startPage; } @Override public boolean requested() { return requested != NOT_REQUESTED; } @Override public boolean isLoading() { return isLoading; } }