MVP实现分页加载

来源:互联网 发布:音效软件 知乎 编辑:程序博客网 时间:2024/06/05 15:40

使用MVP达到了代码的解耦性


view层

public interface IGoods {    //搜索商品 回调结果    void GetGoods(List<ShopBean.DataBean> dlist);}
//model层的接口
/** * 1. 类的用途 * 2. @author chensi * 3. @date 2017/10/14 11:08 */public interface IGoodsModel {    void getGoods(Context context, IGoods iGoods, String name, int page);}

//继承model接口
/** * 1. 类的用途 * 2. @author chensi * 3. @date 2017/10/14 11:09 */public class GoodsModel implements IGoodsModel{    Context context;    IGoods iGoods;    private List<ShopBean.DataBean> data;    public GoodsModel(Context context, IGoods iGoods) {        this.context = context;        this.iGoods = iGoods;    }    @Override    public void getGoods(Context context, IGoods iGoods, String name,int page) {        //请求网路数据        if(name!=null&&!"".equals(name)){            getHttpGoods(name,page);        }else{            Toast.makeText(context,"输入不能为空",Toast.LENGTH_SHORT).show();        }    }    private void getHttpGoods(String name,int page) {        Map<String,String> map=new HashMap<>();        map.put("keywords",name);        map.put("page",page+"");        OkHttp3Utils.doPost(Api.SHOP, map, new Callback() {            @Override            public void onFailure(Call call, IOException e) {            }            @Override            public void onResponse(Call call, Response response) throws IOException {                String string1 = response.body().string();                Message message=new Message();                message.obj=string1;                message.what=0;                handler.sendMessage(message);            }        });    }    Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what){                case 0:                    String string1= (String) msg.obj;                    Gson gson=new Gson();                    ShopBean shopBean = gson.fromJson(string1, ShopBean.class);                    data = shopBean.getData();                    iGoods.GetGoods(data);                    break;            }        }    };}

//presenter
/** * 1. 类的用途 * 2. @author chensi * 3. @date 2017/10/14 11:07 */public interface IGoodsPresenter {    void GetMyGoods(Context context, String name, int p);}

实现presenter接口

/** * @author ${**} * @date 2017/10/15/23:32 */public class GoodsPresenter implements IGoodsPresenter {    private IGoods iGoods;    private IGoodsModel iGoodsModel;    public GoodsPresenter(IGoods iGoods,Context context) {        this.iGoods = iGoods;        iGoodsModel=new GoodsModel(context,iGoods);    }    @Override    public void GetMyGoods(Context context, String name, int p) {        iGoodsModel.getGoods(context,iGoods,name,p);    }}
activity的操作

public class MainActivity_Shop extends AppCompatActivity implements IGoods {    @Bind(R.id.back)    ImageView back;    @Bind(R.id.et)    EditText et;    @Bind(R.id.checkbox_cb)    CheckBox checkboxCb;    @Bind(R.id.pr)    PullLoadMoreRecyclerView pr;    private IGoodsPresenter presenter;    int page=1;    Handler handler=new Handler();    private List<ShopBean.DataBean> data;    private MyAdapter adapter;    int flag=0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main__shop);        ButterKnife.bind(this);        pr.setLinearLayout();        presenter = new GoodsPresenter(this,MainActivity_Shop.this);        pr.setOnPullLoadMoreListener(new PullLoadMoreRecyclerView.PullLoadMoreListener() {            @Override            public void onRefresh() {                handler.postDelayed(new Runnable() {                    @Override                    public void run() {                        page=1;                        String string = et.getText().toString();                        presenter.GetMyGoods(MainActivity_Shop.this,string,page);                        pr.setPullLoadMoreCompleted();                    }                },2000);            }            @Override            public void onLoadMore() {                handler.postDelayed(new Runnable() {                    @Override                    public void run() {                        page++;                        String string = et.getText().toString();                        presenter.GetMyGoods(MainActivity_Shop.this,string,page);                        pr.setPullLoadMoreCompleted();                    }                },2000);            }        });        et.addTextChangedListener(new TextWatcher() {            @Override            public void beforeTextChanged(CharSequence s, int start, int count, int after) {            }            @Override            public void onTextChanged(CharSequence s, int start, int before, int count) {            }            @Override            public void afterTextChanged(Editable s) {                if (!TextUtils.isEmpty(et.getText().toString())) {                    //搜索                    String string = et.getText().toString();                    presenter.GetMyGoods(MainActivity_Shop.this,string,page);                }            }        });    }    @Override    public void GetGoods(final List<ShopBean.DataBean> dlist) {        if (page==1){            data=new ArrayList<ShopBean.DataBean>();        }        for (int i=0;i<dlist.size();i++){            data.add(dlist.get(i));        }        initData(data);        checkboxCb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                if (adapter!=null){                    if (checkboxCb.isChecked()){                        pr.setLinearLayout();                        MyAdapter adapter1=new MyAdapter(MainActivity_Shop.this,dlist,0);                        pr.setAdapter(adapter1);                        adapter1.notifyDataSetChanged();                    }else {                        pr.setGridLayout(2);                        MyAdapter adapter1=new MyAdapter(MainActivity_Shop.this,dlist,1);                        pr.setAdapter(adapter1);                        adapter1.notifyDataSetChanged();                    }                }            }        });    }    public void initData(final List<ShopBean.DataBean> list){        if (adapter==null){            adapter=new MyAdapter(this,list,flag);            pr.setAdapter(adapter);        }else {            adapter.notifyDataSetChanged();        }        adapter.setonRecyclerViewItemClickListener(new MyAdapter.onRecyclerViewItemClickListener() {            @Override            public void onRecyclerViewItemClick(int position) {                String detailUrl = list.get(position).getDetailUrl();                Intent it=new Intent(MainActivity_Shop.this,MainActivity_Shop_Web.class);                it.putExtra("pid",list.get(position).getPid());                it.putExtra("sellerid",list.get(position).getSellerid());                it.putExtra("detailUrl",detailUrl);                startActivity(it);            }        });    }}