MVP购物车(全选/反选/总价)

//效果
在这里插入图片描述

//依赖

  //MetrialDesign:Design库
    implementation 'com.android.support:design:28.+'
    //Butterknife:根据反射注入框架
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    //Brvah:RecyclerView快速开发框架
    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
    //SmartRefreshLayout
    implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-19'
    implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-19'
    //没有使用特殊Header,可以不加这行
    //okgo
    //必须使用
    implementation 'com.lzy.net:okgo:3.0.4'
    implementation 'com.google.code.gson:gson:2.8.5'
    //图片加载框架
    implementation 'com.github.bumptech.glide:glide:4.8.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'



//布局就不写了

//创建mvp
//契约类 --不做过多解释

public class IShoppContent  {

    //v
    public interface ShoppView{

        //数据刷新
        public void showData(String responseShoppData);
    }

    //P
    public interface ShoppPersent<ShoppView>{


        //绑定
        public void attchView(ShoppView shoppView);

        //解绑
        public void deachView(ShoppView shoppView);


        //M 请求的数据
        public void requestData();



    }

    ///M
    public interface ShoppModel{

        //方法
        public void getewquestData(CallBack callBack);


        //接口回调
        public interface CallBack{
            public void onCallBack(String responseShoppData);

        }

    }
}

//P

public class ShoppPresentImpl implements IShoppContent.ShoppPersent<IShoppContent.ShoppView> {
    IShoppContent.ShoppView shoppView;
    private SoftReference<IShoppContent.ShoppView> softReference;
    private IShoppContent.ShoppModel shoppModel;

    @Override
    public void attchView(IShoppContent.ShoppView shoppView) {
        this.shoppView = shoppView;

        softReference = new SoftReference<>(shoppView);
        shoppModel = new ShoppModelImpl();
    }

    @Override
    public void deachView(IShoppContent.ShoppView shoppView) {
         softReference.clear();
    }

    @Override
    public void requestData() {
         shoppModel.getewquestData(new IShoppContent.ShoppModel.CallBack() {
             @Override
             public void onCallBack(String responseShoppData) {
                 shoppView.showData(responseShoppData);
             }
         });

    }
}

M

public class ShoppModelImpl implements IShoppContent.ShoppModel {
    @Override
    public void getewquestData(final CallBack callBack) {

        OkGo.<String>get(Contants.SHOPPINGCART_URL).execute(new StringCallback() {
            @Override
            public void onSuccess(Response<String> response) {
                String responseShoppData = response.body().toString();
               callBack.onCallBack(responseShoppData);
            }
        });
    }
}

V

public class MainActivity extends AppCompatActivity implements IShoppContent.ShoppView, View.OnClickListener {

    @BindView(R.id.main_rv_business)
    RecyclerView mainRvBusiness;
    @BindView(R.id.main_smartRefreshLayout)
    SmartRefreshLayout mainSmartRefreshLayout;
    @BindView(R.id.main_allcheck)
    CheckBox mainAllcheck;
    @BindView(R.id.main_btn_jie)
    Button mainBtnJie;
    @BindView(R.id.main_tv_money)
    TextView mainTvMoney;
    private IShoppContent.ShoppPersent shoppPresent;
    private List<ShoppBean.DataBean> data;
    private BusinAdapter adapter;
    private AlertDialog alertDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        shoppPresent = new ShoppPresentImpl();
        shoppPresent.attchView(this);
        //触发事件
        shoppPresent.requestData();

    }

    @Override
    public void showData(String responseShoppData) {
        mainAllcheck.setOnClickListener(null);

        mainAllcheck.setOnClickListener(this);

        Gson gson = new Gson();
        Log.e("gs", "解析的---------responseShoppData: "+responseShoppData);
        ShoppBean shoppBean = gson.fromJson(responseShoppData, ShoppBean.class);
        data = shoppBean.getData();

        //设置适配器
        LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL,false);
        mainRvBusiness.setLayoutManager(manager);

        adapter = new BusinAdapter(R.layout.business_layout, data);
        mainRvBusiness.setAdapter(adapter);

        adapter.setOnBusinessItemClickLisenter(new BusinAdapter.OnBusinessItemClickLisenter() {
            @Override
            public void onCallBack() {
                boolean result = true;
                for (int i = 0; i < data.size(); i++) {
                 //层
                    boolean businessChecked = data.get(i).getBusinessChecked();
                    result = result & businessChecked;
                    for (int j = 0; j < data.get(i).getList().size() ; j++) {
                        boolean goodsChecked = data.get(i).getList().get(j).getGoodsChecked();
                        result = result & goodsChecked;
                    }
                }
                mainAllcheck.setChecked(result);
                //计算总价
                calculateTotalCount();
            }


        });




    }

  
    @Override
    protected void onDestroy() {
        super.onDestroy();
        shoppPresent.deachView(this);
    }

    @Override
    public void onClick(View v) {
        for (int i = 0; i <data.size() ; i++) {
            data.get(i).setBusinessChecked(mainAllcheck.isChecked());
            for (int j = 0; j <data.get(i).getList().size() ; j++) {
                data.get(i).getList().get(j).setGoodsChecked(mainAllcheck.isChecked());
            }
        }
         adapter.notifyDataSetChanged();
        //计算总价
        calculateTotalCount();
    }
}

  private void calculateTotalCount() {
    //对项目总价进行计算
        double totalCount =0;
        for (int i = 0; i < data.size(); i++) {
            for (int j = 0; j <data.get(i).getList().size() ; j++) {

              //判断是否选中的
                if (data.get(i).getList().get(j).getGoodsChecked() ==true){
                    double price = data.get(i).getList().get(j).getPrice();
                    int defalutNumber = data.get(i).getList().get(j).getDefalutNumber();
                    double goodsprice  =price*defalutNumber;
                    totalCount +=goodsprice;
                }

            }
        }

        mainTvMoney.setText("总价是:"+totalCount);


    }

//商家的适配器

public class BusinAdapter extends BaseQuickAdapter<ShoppBean.DataBean,BaseViewHolder> {
    OnBusinessItemClickLisenter onBusinessItemClickLisenter;
    public interface OnBusinessItemClickLisenter{
        public void onCallBack();
    }
    public void setOnBusinessItemClickLisenter(OnBusinessItemClickLisenter onBusinessItemClickLisenter){
        this.onBusinessItemClickLisenter = onBusinessItemClickLisenter;

    }

    public BusinAdapter(int layoutResId, @Nullable List<ShoppBean.DataBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, final ShoppBean.DataBean item) {
         //设置商家名称
        helper.setText(R.id.busin_name,item.getSellerName());
        //获取子布局
        RecyclerView goodsrv  = helper.getView(R.id.busin_rv_goods);

        //避免焦点抢占
        final CheckBox busin_check = helper.getView(R.id.busin_check);
        busin_check.setOnCheckedChangeListener(null);
        //获取商家条目是否选中状态
        busin_check.setChecked(item.getBusinessChecked());

        final ArrayList<ShoppBean.DataBean.ListBean> goodslist = (ArrayList<ShoppBean.DataBean.ListBean>) item.getList();
        LinearLayoutManager manager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false);
        goodsrv.setLayoutManager(manager);

        final GoodsAdapter adapter = new GoodsAdapter(R.layout.goods_layout,goodslist);
        goodsrv.setAdapter(adapter);

        adapter.setOnGoodsItemClickLisenter(new GoodsAdapter.OnGoodsItemClickLisenter() {
            @Override
            public void onCallBack() {
                //遍历获取所有子条目,只要有一个未勾选,商品类别也应该是未勾选
                boolean result = true;
                for (int i = 0; i <item.getList().size() ; i++) {
                    result = result & item.getList().get(i).getGoodsChecked();
                }
                busin_check.setChecked(result);

                adapter.notifyDataSetChanged();
                onBusinessItemClickLisenter.onCallBack();
            }
        });

        busin_check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i = 0; i <item.getList().size() ; i++) {
                  item.getList().get(i).setGoodsChecked(busin_check.isChecked());
                }
                item.setBusinessChecked(busin_check.isChecked());
                adapter.notifyDataSetChanged();
                onBusinessItemClickLisenter.onCallBack();
            }
        });



    }
}

//商品的适配器

public class GoodsAdapter extends BaseQuickAdapter<ShoppBean.DataBean.ListBean,BaseViewHolder> {
    OnGoodsItemClickLisenter onGoodsItemClickLisenter;

    public void setOnGoodsItemClickLisenter(OnGoodsItemClickLisenter onGoodsItemClickLisenter){
          this.onGoodsItemClickLisenter = onGoodsItemClickLisenter;
    }
    public interface OnGoodsItemClickLisenter{
        public void onCallBack();
    }


    public GoodsAdapter(int layoutResId, @Nullable List<ShoppBean.DataBean.ListBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, final ShoppBean.DataBean.ListBean item) {
         helper.setText(R.id.goods_name,item.getTitle());
         helper.setText(R.id.goods_money,"$:"+item.getPrice());

        ImageView imageView  = helper.getView(R.id.goods_imageView);
        String imageStr = item.getImages();
        String[] goods = imageStr.split("\\|");
       // Log.e("gs", "goods: ."+goods );
        Glide.with(mContext).load(goods[0]).into(imageView);

        //避免焦点抢占
        CheckBox goods_checkBox = helper.getView(R.id.goods_checkBox);
        goods_checkBox.setOnCheckedChangeListener(null);

        goods_checkBox.setChecked(item.getGoodsChecked());

        goods_checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                item.setGoodsChecked(isChecked);
                onGoodsItemClickLisenter.onCallBack();
            }
        });

        //加减
        CalcutorView calcutorView = helper.getView(R.id.goods_calcu);
        calcutorView.setOnCalCulatorLisenter(new CalcutorView.OnCalCulatorLisenter() {
            @Override
            public void onJian(int nums) {
                //对新增的字段进行改动
                item.setDefalutNumber(nums);
                onGoodsItemClickLisenter.onCallBack();
            }

            @Override
            public void onAdd(int nums) {
                //对新增的字段进行改动
                item.setDefalutNumber(nums);
                onGoodsItemClickLisenter.onCallBack();
            }

        });

    }
}

//自动加减的view

public class CalcutorView extends LinearLayout implements View.OnClickListener {

    private Button add;
    private Button jian;
    private EditText snum;

    public CalcutorView(Context context) {
        super(context);
    }

    public CalcutorView(Context context, AttributeSet attrs) {
        super(context, attrs);

        View rootView = LayoutInflater.from(context).inflate(R.layout.calculator_layout, this);
        //获取地
        add = rootView.findViewById(R.id.calcu_jia);
        jian = rootView.findViewById(R.id.calcu_jian);
        snum = rootView.findViewById(R.id.calcu_num);

        add.setOnClickListener(this);
        jian.setOnClickListener(this);


    }

    @Override
    public void onClick(View v) {
        String numStr = snum.getText().toString();
        int nums = Integer.parseInt(numStr);

        switch (v.getId()){
            case R.id.calcu_jian:
                nums -=1;
                if (nums<0){
                    nums=0;
                    snum.setText(String.valueOf(nums));
                }
                snum.setText(String.valueOf(nums));

                //接口回穿数据
               onCalCulatorLisenter.onJian(nums);
                break;
            case R.id.calcu_jia:
                     nums +=1;
                     snum.setText(String.valueOf(nums));
                     onCalCulatorLisenter.onAdd(nums);
                break;
        }

    }

    OnCalCulatorLisenter onCalCulatorLisenter;
    //方法
    public interface  OnCalCulatorLisenter {
        //减
        public void onJian(int nums);

        //加
        public void onAdd(int nums);

    }
    public void setOnCalCulatorLisenter(OnCalCulatorLisenter onCalCulatorLisenter){
        this.onCalCulatorLisenter = onCalCulatorLisenter;
    }


}

注意: 看看 自己的bean类中是否 有 选中的类 和价钱的初始数据
如果没有自己添加 写setget,方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值