android购物车

使用MVP进行数据的传送   布局自己定义需要什么创建什么
//首先我们先给android购物车配置上接口


//首先我们需要封装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就可以

android购物车

数据先进行展示android购物车

//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();

}
}
android购物车