一.xRecyclerView上拉刷新 下拉加载

一.导入依赖

compile 'com.jcodecraeer:xrecyclerview:1.5.9'

二.xml布局

<com.jcodecraeer.xrecyclerview.XRecyclerView
        android:id="@+id/good_xRecycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></com.jcodecraeer.xrecyclerview.XRecyclerView>

三.view层接口

public interface GoodVIew {
    //展示数据
    void showGoodsList(List<ShowBean.DataBean> show_list);

    //刷新
    void getRegFresh(List<ShowBean.DataBean> list);

    //加载
    void getLoadMore(List<ShowBean.DataBean> list);

    //获取page
    String getpage();

}

四.主方法 实现接口

public class GoodActivity extends AppCompatActivity implements GoodVIew {

    @BindView(R.id.good_xRecycler)
    XRecyclerView good_XRecycler;
    private GoodAdapter goodAdapter;
    List<ShowBean.DataBean> list = new ArrayList<>();
    int page = 1;
    private Presenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_good);
        ButterKnife.bind(this);
//        给xrecycler一个布局
//        初始化数据
        initviews();
        presenter = new Presenter();
        presenter.showgood(new MyModel(presenter), this);

    }

    //        初始化数据
    private void initviews() {
        good_XRecycler.setLayoutManager(new LinearLayoutManager(this));
//        setLoadingMoreEnabled允许下拉刷新
        good_XRecycler.setLoadingMoreEnabled(true);
//        setPullRefreshEnabled允许上拉加载
        good_XRecycler.setPullRefreshEnabled(true);
        good_XRecycler.setLoadingListener(new XRecyclerView.LoadingListener() {
            // 刷新
            @Override
            public void onRefresh() {
                page = 1;
                presenter.regFresh(new MyModel(presenter), GoodActivity.this);
                good_XRecycler.refreshComplete();
            }

            //加载
            @Override
            public void onLoadMore() {

                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        page++;
                        presenter.loadFresh(new MyModel(presenter), GoodActivity.this);
                        good_XRecycler.loadMoreComplete();
                    }
                }, 1000);

            }
        });

    }

    //展示商品
    @Override
    public void showGoodsList(List<ShowBean.DataBean> show_list) {
        Log.d("ccc", "-展示列表activity--获取到集合--------" + show_list);
        goodAdapter = new GoodAdapter(this, show_list);
    //放入适配器
        good_XRecycler.setAdapter(goodAdapter);
    }

    //刷新
    @Override
    public void getRegFresh(List<ShowBean.DataBean> list) {
        this.list = list;
//        在适配器里面给集合一个get set 方法就可以直接拿到集合
        goodAdapter.setList(list);
//        notifyDataSetChanged刷新
        goodAdapter.notifyDataSetChanged();
    }

    //加载
    @Override
    public void getLoadMore(List<ShowBean.DataBean> list) {
        goodAdapter.getList().addAll(list);
        //  notifyDataSetChanged刷新
        goodAdapter.notifyDataSetChanged();
    }

    //获取page
    @Override
    public String getpage() {
        return page + "";
    }
}

五.model层写一个MyService接口 获得网络地址

public interface MyService {
    //展示商品列表
    @FormUrlEncoded
    @POST("/product/getProducts")
    Observable<ShowBean> getGoodsList(@FieldMap Map<String, String> map);

}

六.model层写一个接口 IModel

public interface IModel {
    //展示数据
    void showGood(Map<String, String> map);

    //刷新
    void getRefresh(Map<String, String> map);

    //加载
    void getLoadMore(Map<String, String> map);
}

七.model层写一个MyView 实现 IModel 接口

public class MyModel implements IModel {
    private IPresenter iPresenter;

    public MyModel(IPresenter iPresenter) {
        this.iPresenter = iPresenter;
    }
    //-----------------------------------展示商品------------------------------------
    @Override
    public void showGood(Map<String, String> map) {
        RetrofitUtils instance = RetrofitUtils.getRetrofitUtils();
        MyService myService = instance.createService(MyService.class);
        Observable<ShowBean> observable = myService.getGoodsList(map);
        observable.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ShowBean>() {
                    @Override
                    public void onCompleted() {
                        Log.d("ccc", "onCompleted()-获取商品展示完成----------------");
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d("ccc", "onError()-获取商品展示异常----------------" + e.getMessage());
                    }

                    @Override
                    public void onNext(ShowBean showBean) {
                        Log.d("ccc", "onNext()-获取商品展示-正在执行----------------" + showBean);
                        if (showBean.getCode().equals("0")) {
                            iPresenter.getGoodListData(showBean.getData());
                        }
                    }
                });
    }

    //-----------------------------------刷新----------------------------
    @Override
    public void getRefresh(Map<String, String> map) {
        RetrofitUtils instance = RetrofitUtils.getRetrofitUtils();
        MyService myService = instance.createService(MyService.class);
        Observable<ShowBean> observable = myService.getGoodsList(map);
        observable.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ShowBean>() {
                    @Override
                    public void onCompleted() {
                        Log.d("ddd", "onCompleted()-刷新完成----------------");
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d("ddd", "onError()-刷新展示异常----------------" + e.getMessage());
                    }

                    @Override
                    public void onNext(ShowBean showBean) {
                        Log.d("ddd", "onNext()-刷新-正在执行----------------" + showBean);
                        if (showBean.getCode().equals("0")) {
                            iPresenter.getRegFreshListData(showBean.getData());
                        }
                    }
                });
    }

    //---------------------------加载----------------------------
    @Override
    public void getLoadMore(Map<String, String> map) {
        RetrofitUtils instance = RetrofitUtils.getRetrofitUtils();
        MyService myService = instance.createService(MyService.class);
        Observable<ShowBean> observable = myService.getGoodsList(map);
        observable.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ShowBean>() {
                    @Override
                    public void onCompleted() {
                        Log.d("eee", "onCompleted()-加载完成----------------");
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d("eee", "onError()-加载展示异常----------------" + e.getMessage());
                    }

                    @Override
                    public void onNext(ShowBean showBean) {
                        Log.d("eee", "onNext()-加载-正在执行----------------" + showBean);
                        if (showBean.getCode().equals("0")) {
                            iPresenter.getLoadListData(showBean.getData());
                        }
                    }
                });
    }
}

八.在presenter写一个接口 IPresenter

public interface IPresenter {

    //    ---------------------展示商品------------------------------------
    void showgood(IModel iModel, GoodVIew goodVIew);

    void getGoodListData(List<ShowBean.DataBean> show_list);

    //    -----------------------刷新商品------------------------------------
    void regFresh(IModel iModel, GoodVIew goodVIew);

    void getRegFreshListData(List<ShowBean.DataBean> regfresh_list);

    //    -----------------------加载商品------------------------------------
    void loadFresh(IModel iModel, GoodVIew goodVIew);

    void getLoadListData(List<ShowBean.DataBean> load_list);


}

九.在presenter写一个接口 Presenter 实现 IPresenter 接口

public class Presenter implements IPresenter {

    private IMyView iMyView;
    private IRegView iRegView;
    private GoodVIew goodVIew;

    //-------------------------展示商品-------------------------------
    @Override
    public void showgood(IModel iModel, GoodVIew goodVIew) {
        this.goodVIew = goodVIew;
        Map<String, String> map = new HashMap<>();
//        pscid=39&page=1
        map.put("pscid", "39");
        map.put("page", "1");
        iModel.showGood(map);
    }

    @Override
    public void getGoodListData(List<ShowBean.DataBean> show_list) {
        Log.d("ccc", "--------p层展示");
        goodVIew.showGoodsList(show_list);
    }

    //-------------------------刷新商品-------------------------------
    @Override
    public void regFresh(IModel iModel, GoodVIew goodVIew) {
        Log.d("ddd", "--------p层刷新");
        this.goodVIew = goodVIew;
        Map<String, String> map = new HashMap<>();
        map.put("page", goodVIew.getpage());
        map.put("pscid", "39");
        iModel.getRefresh(map);
    }

    @Override
    public void getRegFreshListData(List<ShowBean.DataBean> regfresh_list) {
        goodVIew.getLoadMore(regfresh_list);
    }

    //-------------------------加载商品-------------------------------
    @Override
    public void loadFresh(IModel iModel, GoodVIew goodVIew) {
        this.goodVIew = goodVIew;
        Map<String, String> map = new HashMap<>();
        map.put("page", goodVIew.getpage());
        map.put("pscid", "39");
        iModel.getLoadMore(map);
    }

    @Override
    public void getLoadListData(List<ShowBean.DataBean> load_list) {
        goodVIew.getLoadMore(load_list);
    }
}

猜你喜欢

转载自blog.csdn.net/shitou0/article/details/79834429