Paginate

介绍:

适用于RecyclerView 和 AbsListView的分页下拉加载库,可以自定义加载的视图,自定义临界值等。

运行效果:

使用说明:

Gradle:

compile 'com.github.markomilos:paginate:0.5.0'

Maven:

<dependency>
  <groupId>com.github.markomilos</groupId>
  <artifactId>paginate</artifactId>
  <version>0.5.0</version>
</dependency>

实现Paginate.Callbacks**** 

Paginate.Callbacks callbacks = new Paginate.Callbacks() {
    @Override
    public void onLoadMore() {
        // Load next page of data (e.g. network or database)
    }
    @Override
    public boolean isLoading() {
        // Indicate whether new page loading is in progress or not
        return loadingInProgress;
    }
    @Override
    public boolean hasLoadedAllItems() {
        // Indicate whether all data (pages) are loaded or not
        return hasLoadedAllItems;
    }
};

RecyclerView

Paginate.with(recyclerView, callbacks)
        .setLoadingTriggerThreshold(2)
        .addLoadingListItem(true)
        .setLoadingListItemCreator(new CustomLoadingListItemCreator())
        .setLoadingListItemSpanSizeLookup(new CustomLoadingListItemSpanLookup())
        .build();

注意:LayoutManager和RecyclerView.Adapter需要在以上代码调用之前设置。****

实现LoadingListItemCreator以自定义加载视图。

private class CustomLoadingListItemCreator implements LoadingListItemCreator {
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.custom_loading_list_item, parent, false);
        return new VH(view);
    }
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        // Bind custom loading row if needed
    }
}

AbsListView

Paginate.with(absListView, callbacks)
        .setOnScrollListener(scrollListener) // Delegate scroll listener
        .setLoadingTriggerThreshold(2)
        .addLoadingListItem(true)
        .setLoadingListItemCreator(new CustomLoadingListItemCreator())
        .build();

注意: Adapter 需要在以上代码调用之前设置 。

实现LoadingListItemCreator以提供自定义加载视图。****

private class CustomLoadingListItemCreator implements LoadingListItemCreator {
    @Override
    public View newView(int position, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.custom_loading_list_item, parent, false);
        view.setTag(new VH(view));
        return view;
    }
    @Override
    public void bindView(int position, View view) {
        // Bind custom loading row if needed
    }
}

Paginate instance

调用Paginate.Builder(with方法返回的就是一个Builder)的build()方法将返回Paginate实例,这样你就可以:

1、unbind()  - 调用unbind让列表(RecyclerView 或者 AbsListView)解开和Paginate的绑定。Paginate使用scroll listener和adapter data observer来执行所需的检查(当列表滚动到底部或者有新的数据插入),它把原始的adapter用新的包含了加载项的adapter封装了一遍。当调用unbind,原始的adapter会被设置到列表,而 scroll listeners和 data observer也会解除关系。如果你要重新设置 recyclerview(比如改变adapter或者layoutmanager ),你就需要调用unbind()。

2、setHasMoreDataToLoad(boolean) - 如果你使用了loading row (加载视图)(默认设置),每次当你往adapter中添加数据的时候都会执行一次检查,如果没有更多的数据要加载loading row 将被移除。即loading row 会自动被添加或者移除。手动调用这个方法可以明确的告诉有更多的item被加载。

已下载
0