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.csdn.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();

}
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值