上下拉刷新列表总结

ui


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:orientation="vertical">
    //title
    <include
        android:id="@+id/title"
        layout="@layout/app_title" />
    //下拉刷新
    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipe_refresh"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffffff"
        android:orientation="vertical">

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        //列表
            <android.support.v7.widget.RecyclerView
                android:id="@+id/rv_news_list"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:animationCache="false"
                android:persistentDrawingCache="scrolling" />
    // 加载状态ui
            <include layout="@layout/layout_common_empty" />
        FrameLayout>
    android.support.v4.widget.SwipeRefreshLayout>
LinearLayout>

p 层

public interface IBasePresenter {

    /**
     * 获取网络数据,更新界面
     */
    /**
     * 获取网络数据,更新界面
     * @param isRefresh 新增参数,用来判断是否为下拉刷新调用,下拉刷新的时候不应该再显示加载界面和异常界面
     */
    void getData(boolean isRefresh);

    /**
     * 加载更多数据
     */
    void getMoreData();
}
public class MainGetNewsPresenter implements IBasePresenter {
    private MainGetNewsView view;
    private String homeid;
    //默认加载第一页
    private int page = 1;
    public MainGetNewsPresenter(MainGetNewsView view,String homeid,int page) {
        this.view = view;
        this.homeid = homeid;
        this.page = page;
    }
    @Override
    public void getData(final boolean isRefresh) {
    //每次刷新都初始化page = 1
        page = 1;
        RetrofitService.getNews("2",page+"")
                .doOnSubscribe(new Action0() {
                    @Override
                    public void call() {
                    //加载第一页有两种情况
                    //1 正常加载,显示dialog动画
                    //2 下拉刷新,显示下拉刷新动画
                    //所以要进行判断
                        if (!isRefresh){
                            view.showLoading();
                        }

                    }
                })
                .subscribe(new BaseSubscriber>>() {
                //同理加载完成的分类处理
                    @Override
                    public void onCompleted() {
                        if (isRefresh) {
                            view.finishRefresh();
                        } else {
                            view.hideLoading();
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        view.showNetError();
                    }

                    @Override
                    public void onNext(final BaseCallModel> listBaseCallModel) {
                    //加载完毕在p中做统一处理
                        view.hideLoading();
                        view.loadData(listBaseCallModel.code);
                        //加载成功之后page++
                        page++;
                    }
                });

    }

    @Override
    public void getMoreData() {
        RetrofitService.getNews("2",page+"")
                .subscribe(new BaseSubscriber>>() {
                    @Override
                    public void onCompleted() {
                    }

                    @Override
                    public void onError(Throwable e) {

                        view.loadNoData();
                    }

                    @Override
                    public void onNext(final BaseCallModel> listBaseCallModel) {
                        view.loadMoreData(listBaseCallModel.code);
                        //当前页加载成功加载下一页page++
                        page++;
                    }
                });
    }
}

v 层

public interface MainGetNewsView extends ILoadDataView> {

}

public interface ILoadDataView extends IBaseView {

    /**
     * 加载数据
     * @param data 数据
     */
    void loadData(T data);

    /**
     * 加载更多
     * @param data 数据
     */
    void loadMoreData(T data);

    /**
     * 没有数据
     */
    void loadNoData();
}


public interface IBaseView {

    /**
     * 显示加载动画
     */
    void showLoading();

    /**
     * 隐藏加载
     */
    void hideLoading();

    /**
     * 显示网络错误,modify 对网络异常在 BaseActivity 和 BaseFragment 统一处理
     */
    void showNetError();


    /**
     * 完成刷新, 新增控制刷新
     */
    void finishRefresh();
}

activity

//1 下拉刷新
@BindView(R.id.swipe_refresh)
SwipeRefreshLayout mSwipeRefresh;
/**
  *2 初始化下拉刷新
  */
    private void initSwipeRefresh() {
        if (mSwipeRefresh != null) {
            SwipeRefreshHelper.init(mSwipeRefresh, new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                //下拉刷新才会调用,回调
                    updateViews(true);
                }
            });
        }
    }
    //3 在回调函数中关闭加载动画,可以在p层做统一处理




//上拉加载更多,主要用到了BaseQuickAdapter 
listAdapter.setRequestDataListener(new OnRequestDataListener() {
            @Override
            public void onLoadMore() {
            //上拉回调
                commentPresenter.getMoreData();
            }
        });

    @Override
    public void loadMoreData(List data) {
    //加载完成
        listAdapter.loadComplete();
        listAdapter.addItems(data);
        list.addAll(data);
    }

待优化

你可能感兴趣的:(android,上下拉刷新)