MainActivity 顯示列表,支持「全部數據」與「篩選後數據」兩種模式,均需下拉加載更多(分頁)。
// 1. 定義數據源接口
interface DataSource {
void loadPage(int page, OnLoadListener listener);
boolean hasMore();
}
// 2. 實現具體數據源
class AllDataSource implements DataSource { ... }
class FilterDataSource implements DataSource { ... }
// 3. ListView 持有當前數據源引用
private DataSource currentSource = new AllDataSource();
// 4. 篩選 Activity 返回時切換數據源
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQ_FILTER && resultCode == RESULT_OK) {
FilterParams params = data.getParcelableExtra("params");
currentSource = new FilterDataSource(params);
adapter.clear(); // 清空舊數據
currentSource.loadPage(1, listener); // 重新加載第一頁
}
}
// 5. 統一分頁監聽邏輯
OnLoadListener listener = new OnLoadListener() {
@Override
public void onSuccess(List- items, boolean hasMore) {
adapter.addAll(items);
currentSourceHasMore = hasMore;
}
@Override
public void onError(Exception e) { ... }
};
// 6. 下拉加載更多觸發
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == SCROLL_STATE_IDLE && lastVisible == totalCount - 1) {
if (currentSourceHasMore) {
currentSource.loadPage(currentPage + 1, listener);
}
}
}
// ... onScroll 更新 lastVisible
});