package com.uservoice.uservoicesdk.ui;
import android.content.Context;
import java.util.ArrayList;
import java.util.List;
public abstract class PaginatedAdapter<T> extends ModelAdapter<T> {
private int page = 1;
public PaginatedAdapter(Context context, int layoutId, List<T> objects) {
super(context, layoutId, objects);
}
public void loadMore() {
if (loading || searchActive || objects.size() == getTotalNumberOfObjects())
return;
loading = true;
notifyDataSetChanged();
loadPage(page, new DefaultCallback<List<T>>(context) {
@Override
public void onModel(List<T> model) {
objects.addAll(model);
page += 1;
loading = false;
notifyDataSetChanged();
}
});
}
protected abstract int getTotalNumberOfObjects();
protected List<T> getObjects() {
return shouldShowSearchResults() ? searchResults : objects;
}
public void reload() {
// not *correct* but probably good enough. the correct thing would be to cancel the load somehow and proceed
if (loading)
return;
page = 1;
objects = new ArrayList<T>();
loadMore();
}
}