android购物车
使用MVP进行数据的传送 布局自己定义需要什么创建什么
//首先我们先给配置上接口
//首先我们需要封装okhttp在moudle中解析 然后把list集合传回给View
public class MyDataMoudle implements DataMoudle { @Override public void getData(String url, final DataPresenter presenter) { OkhtttpUtils.doGet(url, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String json = response.body().string(); Gson gson = new Gson(); ShopingBean bean = gson.fromJson(json, ShopingBean.class); List<ShopingBean.DataBean> list = bean.getData(); presenter.success(list); } }); } }
https://blog.****.net/l6666_6666/article/details/79501742 封装代码
presenter中实例化
DataView dataView;
private final MyDataMoudle myDataMoudle;
public MyDataPresenter(DataView dataView) {
this.dataView=dataView;
myDataMoudle = new MyDataMoudle ();
}
//用于传到view中展示数据的集合list
@Override public void success(List<ShopingBean.DataBean> list) { dataView.getBackView(list); } @Override public void error() { } //从view中传回来的网址到moudle中不然moudle中没有网址怎么解析数据并传到view中 public void netwrok(String dataUrl) { myDataMoudle.getData(dataUrl,this); }
我们在MainActivity中实现view的接口把传过来的list集合进行解析
//回调view的接口
@Override
public void getBackView(List<ShopingBean.DataBean> list) {
Message msg = Message.obtain();
msg.obj=list;
handler.sendMessage(msg);
}
我们因为用的异步所以需要handler
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
list = (List<ShopingBean.DataBean>) msg.obj;
myAdapter = new MyAdapter(MainActivity.this, list);
listview.setAdapter(myAdapter);
//调用adapter里面的方法
myAdapter.setShoping(MainActivity.this);
}
};
MyAdapter
因为我们用的listview所以只需要继承baseAdapter就可以
数据先进行展示
//MainActivity页面中的全选
cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(cb.isChecked()){
for(int i=0;i<list.size();i++){
//循环数据如果为true则为全部选中
list.get(i).setCheck(true);
}
adapter.notifyDataSetChanged();
}else{
for(int i=0;i<list.size();i++) {
//循环数据如果为false则为全部选中
list.get(i).setCheck(false);
}
adapter.notifyDataSetChanged();
}
//总价便
changePrice();
}
});
我们在adapter中还进行了各种的点击事件
我们首先先定义一个接口
//修改数量的接口和checkbox的方法
public interface NumInterface{
void jiaNum(int position,TextView tv,Boolean isCheck);
void jianNum(int position,TextView tv,Boolean isCheck);
void groupCheck(int position,boolean isCheck);
void shanChu(int position,View view,boolean isCheck);
}
/** * 目的是把NumInterface传过来,
* @param numInterface */
NumInterface numInterface;
public void setShoping(NumInterface numInterface){
this.numInterface = numInterface;
}
然后进行加的方法adapter中
//加数字
holder.jia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
numInterface.jiaNum(position,holder.zong,holder.cb.isChecked());
}
});
回到MainActivity中还需要在handler中调用adapter的方法
//调用adapter里面的方法
myAdapter.setShoping(MainActivity.this);
然后实现NumInterface接口把里面的各种方法加进来
//进行加数字的操作 @Override public void jiaNum(int position, TextView tv, Boolean isCheck) { //得到数量 int currentNum = list.get(position).getSellerid(); //数量进行加加 currentNum++; //把数量设置到bean里面去 list.get(position).setSellerid(currentNum); //刷新数据 myAdapter.notifyDataSetChanged(); //变总价的方法 changePrice(); }
/** * 改变总价 */ private void changePrice() { totalPrice =0; totalNum = 0; for (int x=0;x<list.size();x++){ ShopingBean.DataBean dataBean = list.get(x); if (dataBean.getCheck()){ //总价进行加加,个数进行加加 totalNum++; totalPrice+=list.get(x).getPrice()*list.get(x).getSellerid(); } } //设置总价 tv.setText(totalPrice+""); }
//减的操作
//adapter中
//减数字
holder.jian.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
numInterface.jianNum(position,holder.zong,holder.cb.isChecked());
}
});
//MainActivity中
//进行减数字操作
@Override
public void jianNum(int position, TextView tv, Boolean isCheck) {
//得到数量
int currentNum = list.get(position).getSellerid();
//减到1 就不让其减
if (currentNum==1){ return; }
//数量进行加加
currentNum--;
//把数量设置到bean里面去
list.get(position).setSellerid(currentNum);
//刷新数据
myAdapter.notifyDataSetChanged();
//变总价
changePrice();}
//adapter中
做点击的多选框的时候
//得到dataBean ShopingBean.DataBean dataBean = list.get(position); if (dataBean.getCheck()){ dataBean.setCheck(true); }else { dataBean.setCheck(false); } //刷新适配器时会回调getView方法 holder.cb.setChecked(list.get(position).getCheck());
//adapter中
//选中的checkbox
holder.cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.get(position).setCheck(holder.cb.isChecked());
//一个是position. 一个是状态
numInterface.groupCheck(position,holder.cb.isChecked());
}
});
//MainActivity中
/** * checkBox的选中 */
@Override
public void groupCheck(int position, boolean isCheck) {
ShopingBean.DataBean dataBean = list.get(position);
//设置checkBox的状态
dataBean.setCheck(isCheck);
//选中返回总价
changePrice();
}
//删除方法item
//删除Adapter holder.shan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { numInterface.shanChu(position,v,holder.cb.isChecked()); } });
//MainActivity
@Override public void shanChu(int position,View v,boolean isCheck) {
GouwuBean.DataBean dataBean = list.get(position); //设置checkBox的状态 if (dataBean.getCheck()){ //进行移除 list.remove(dataBean); adapter.notifyDataSetChanged(); changePrice(); }else { Toast.makeText(getActivity(),"请选择",Toast.LENGTH_SHORT).show(); }}