package org.aisen.wen.ui.view; import android.view.ViewGroup; import org.aisen.wen.ui.adapter.IPagingAdapter; import org.aisen.wen.ui.itemview.AHeaderItemViewCreator; import org.aisen.wen.ui.itemview.IItemViewCreator; import org.aisen.wen.ui.model.listener.PagingModelListenerParam; import org.aisen.wen.ui.presenter.IPagingPresenter; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * Created by wangdan on 16/10/12. */ public interface IPaingView<Item extends Serializable, Result extends Serializable, Header extends Serializable, RefreshView extends ViewGroup> extends IContentView { class RefreshConfig implements Serializable { private static final long serialVersionUID = 6244426943442129360L; public boolean pagingEnd = false;// 分页是否结束 public String positionKey = null;// 最后阅读坐标的Key,null-不保存,针对缓存数据有效 public boolean displayWhenScrolling = true;// 滚动的时候加载图片 public int releaseDelay = 5 * 1000;// 当配置了releaseItemIds参数时,离开页面后自动释放资源 public int[] releaseItemIds = null;// 离开页面时,释放图片的控件,针对ItemView public String emptyHint = "数据为空";// 如果EmptyLayout中有R.id.txtLoadEmpty这个控件,将这个提示绑定显示 public boolean footerMoreEnable = true;// FooterView加载更多 } interface IPagingViewCallback { void onPullDownToRefresh(); void onPullUpToRefresh(); } /** * 刷新控件配置 * * @return */ RefreshConfig getRefreshConfig(); /** * 最后一次阅读Position * * @return */ int getLastReadPosition(); /** * 保存最后一次阅读Position * * @param position */ void putLastReadPosition(int position); /** * 最后一次阅读Position的Top * * @return */ int getLastReadTop(); /** * 保存最后一次阅读Position的Top * * @param top */ void putLastReadTop(int top); /** * 跳转到最后一次阅读Position的Top * */ void toLastReadPosition(); /** * 将Adapter绑定到RefreshView * * @param adapter */ void bindAdapter(IPagingAdapter adapter); /** * 当前RefreshView绑定的Adapter * * @return */ IPagingAdapter getAdapter(); /** * 生成一个新的Adapter * * @param datas * @return */ IPagingAdapter<Item> newAdapter(ArrayList<Item> datas); /** * 设置分页回调 * * @param callback */ void setPagingViewCallback(IPagingViewCallback callback); /** * 将RefreshView设置为加载状态 * * @return */ boolean setRefreshViewToLoading(); /** * 将RefreshView设置为加载结束状态 * * @param mode */ void setRefreshViewFinished(IPagingPresenter.RefreshMode mode); /** * 根据RefreshConfig刷新RefreshView * * @param config */ void setupRefreshViewWithConfig(RefreshConfig config); /** * 每次调用接口,获取新的数据时调用这个方法 * * @param mode * 当次拉取数据的类型 * @param list * 当次拉取的数据 * @param result * 当次拉取的数据 * @return <tt>false</tt> 如果mode={@link IPagingPresenter.RefreshMode#reset} * 默认清空adapter中的数据 */ boolean handleResult(IPagingPresenter.RefreshMode mode, List<Item> list, Result result); /** * 生成一个新的ItemViewCreator * * @return */ IItemViewCreator<Item> newItemViewCreator(); /** * 设置HeaderCreator * * @return */ AHeaderItemViewCreator<Header> configHeaderViewCreator(); /** * 列表控件 * * @return */ RefreshView getRefreshView(); /** * Task状态发生改变 * */ void onTaskStateChanged(PagingModelListenerParam<Result> param); ArrayList<Item> getAdapterItems(); }