MVP模式的OKhttp请求网络数据,xrecyclerview上拉刷新,下拉加载

简单的一个MVP模式实现OKhttp请求网络数据,xrecyclerview上拉刷新,下拉加载。


首先是View层,定义一个接口类,实现显示数据的方法。

 IDataView(接口类):

其中有两个方法,一个是显示数据的,另一个是刷新数据的

public interface IDataView {
    public void showDataView();
    public void reFresh(List<RecyclerBean.SongListBean> listdata);
}
然后是Model层,用来获得数据的。

IDataModel(接口类):

里面实现的是加载数据的方法

public interface IDataModel {
    public void loadData(int type, Callback callback);
}
DataModel类:

实现IDataModel类,重写里面的方法加载数据

public class DataModel implements IDataModel{

    @Override
    public void loadData(int type, Callback callback) {
        OkHttpUtils.getInstance().doGet("http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type="+type+"&size=10&offset=0",callback);
    }
}
presenter层是连接model层和view层的

DataPresenter类

showdatamodel方法调用了model的加载数据的方法再将数据转化为json格式当flag为true时加载更多将数据给list集合,flag为false时下拉刷新,清空集合的旧数据,再把新数据给集合。然后在调用view的刷新方法,把数据放入此方法中。

public class DataPresenter{
    DataModel model;
    IDataView view;
    List<RecyclerBean.SongListBean> listdata=new ArrayList<>();

    public DataPresenter(IDataView view) {
        this.view = view;
        this.model=new DataModel();
    }
    public void showdatamodel(int type, final boolean flag){
        model.loadData(type, new OnUiCallback() {
            @Override
            public void onFailed(Call call, IOException e) {

            }

            @Override
            public void onSuccess(String result) {
                Gson gson=new Gson();
                RecyclerBean recyclerBean = gson.fromJson(result, RecyclerBean.class);
                if (flag){
                    listdata.addAll(recyclerBean.getSong_list());
                }else{
                    listdata.clear();
                    listdata.addAll(recyclerBean.getSong_list());
                }
                view.reFresh(listdata);
            }
        });
    }

}
Activity中:

首先找控件,实例化presenter,再showdataview中加载布局管理器,实力化适配器,加载监听中处理数据。重写刷新的方法,然后再将type值和flag的状态传回presenter传回model。

public class MainActivity extends AppCompatActivity implements IDataView{
    List<RecyclerBean.SongListBean> listdata;
    DataPresenter presenter;
    XRecyclerView xrv;
    ShopRecyclerAdapter adapter;
    int type=21;
    boolean flag=true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initview();
        presenter=new DataPresenter(this);
        showDataView();
        presenter.showdatamodel(type,flag);
    }

    private void initview() {
        xrv= (XRecyclerView) findViewById(R.id.xrv);
    }

    @Override
    public void showDataView() {
        LinearLayoutManager manager = new LinearLayoutManager(this);
        xrv.setLayoutManager(manager);
        adapter = new ShopRecyclerAdapter(this);
        xrv.setAdapter(adapter);
        xrv.setLoadingMoreEnabled(true);
        xrv.setPullRefreshEnabled(true);
        xrv.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                if(type<25){
                    type++;
                }else{
                    type=20;
                    type++;
                }
                flag=false;
                presenter.showdatamodel(type,flag);
                xrv.refreshComplete();
            }

            @Override
            public void onLoadMore() {
                type--;
                flag=true;
                presenter.showdatamodel(type,flag);
                xrv.loadMoreComplete();
            }
        });
    }

    @Override
    public void reFresh(List<RecyclerBean.SongListBean> listdata) {
        adapter.notifyDataSetChanged();
    }
}
Adapter中:

public class ShopRecyclerAdapter extends XRecyclerView.Adapter<XRecyclerView.ViewHolder> {
    Context context;
    List<RecyclerBean.SongListBean> listBean;

    public ShopRecyclerAdapter(Context context) {
        this.context = context;
    }

    public void setRefresh(List<RecyclerBean.SongListBean> listBean){
        this.listBean=listBean;
        notifyDataSetChanged();
    }

    @Override
    public XRecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view=View.inflate(context, R.layout.recy_item,null);
        return new LeftViewHolder(view);
    }

    @Override
    public void onBindViewHolder(XRecyclerView.ViewHolder holder, int position) {
        ((LeftViewHolder)holder).tv_name.setText(listBean.get(position).getArtist_name());
        ((LeftViewHolder)holder).tv_title.setText(listBean.get(position).getAlbum_title());
        Glide.with(context).load(listBean.get(position).getPic_big()).override(120,120).into(((LeftViewHolder)holder).iv_icon);
    }

    @Override
    public int getItemCount() {
        return listBean!=null?listBean.size():0;
    }

    public static class LeftViewHolder extends XRecyclerView.ViewHolder{
        TextView tv_name,tv_title;
        ImageView iv_icon;
        public LeftViewHolder(View itemView) {
            super(itemView);
            tv_name=itemView.findViewById(R.id.tv_name);
            tv_title=itemView.findViewById(R.id.tv_title);
            iv_icon=itemView.findViewById(R.id.iv_icon);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值