展示 全选

主页面代码

 mContext = this;
        //获取P层
        presenter = new ShoppingCartPresenter();
        presenter.attachView(this);
        presenter.requestData();
        //对上下拉的处理
        srlContainer.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                presenter.requestData();
                refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败
            }
        });
        srlContainer.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(RefreshLayout refreshlayout) {
                refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败
            }
        });

    }

    @Override
    public void showLoading() {
        alertDialog = new AlertDialog.Builder(mContext) .setMessage("刷新中").create();
        alertDialog.show();
    }

    @Override
    public void hideLoading() {
        alertDialog.hide();
    }

    @Override
    public void showData(String mCartString) {
        cbAll.setOnCheckedChangeListener(null);
        //全选反选的处理
        //cbAll.setOnCheckedChangeListener(this);
        cbAll.setOnClickListener(this);
        //数据解析展示
        ShoppingCartBean cartBean = new Gson().fromJson(mCartString, ShoppingCartBean.class);
        //外层商家条目的数据源
        businessList = cartBean.getData();
        //TODO 不建议这样处理,手动移除第一个条目
        //设置布局管理器
        LinearLayoutManager manager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false);
        rvBusiness.setLayoutManager(manager);
        //设置适配器
        adapter = new BusinessAdapter(R.layout.recycler_business_item, businessList);
        rvBusiness.setAdapter(adapter);

全选

@Override
    public void onClick(View v) {
        //全选逻辑的处理
        for (int i = 0; i < businessList.size(); i++) {
            //首先让外层的商家条目全部选中
            businessList.get(i).setBusinessChecked(cbAll.isChecked());
            //然后让里层的商品条目全部选中
            for (int j = 0; j < businessList.get(i).getList().size(); j++) {
                businessList.get(i).getList().get(j).setGoodsChecked(cbAll.isChecked());
            }
        }
        adapter.notifyDataSetChanged();
        //计算总价
        calculateTotalCount();
    }

适配
package com.android.alex.shoppingcartdemo.ui.adapter;

import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;

import com.android.alex.shoppingcartdemo.R;
import com.android.alex.shoppingcartdemo.data.beans.ShoppingCartBean;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;

import java.util.List;

/**

  • @author Alex

  • @date 2019/1/15.

  • GitHub:https://github.com/wangshuaialex
    */
    public class BusinessAdapter extends BaseQuickAdapter<ShoppingCartBean.DataBean, BaseViewHolder> {

    OnBusinessItemClickLisenter onBusinessItemClickLisenter;

    public interface OnBusinessItemClickLisenter {
    public void onCallBack();
    }

    public void setOnBusinessItemClickLisenter(OnBusinessItemClickLisenter onBusinessItemClickLisenter) {
    this.onBusinessItemClickLisenter = onBusinessItemClickLisenter;
    }

    public BusinessAdapter(int layoutResId, @Nullable List<ShoppingCartBean.DataBean> data) {
    super(layoutResId, data);
    }
    @Override
    protected void convert(BaseViewHolder helper, final ShoppingCartBean.DataBean item) {
    //设置商家名称
    helper.setText(R.id.tv_business_name, item.getSellerName());
    //设置商家下的子商品条目
    RecyclerView rv_goods = helper.getView(R.id.rv_goods);
    //避免焦点抢占
    final CheckBox cb_business = helper.getView(R.id.cb_business);
    cb_business.setOnCheckedChangeListener(null);
    //************************************
    //获取商家条目是否选中状态
    cb_business.setChecked(item.getBusinessChecked());
    //子商品条目数据源
    List<ShoppingCartBean.DataBean.ListBean> goodsList = item.getList();
    LinearLayoutManager manager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false);
    //设置子条目适配器
    final GoodsAdapter goodsAdapter = new GoodsAdapter(R.layout.recycler_goods_item, goodsList);
    rv_goods.setLayoutManager(manager);
    rv_goods.setAdapter(goodsAdapter);

     //首先处理内部子条目控制外部条目 二级控制一
     goodsAdapter.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();
             }
             cb_business.setChecked(result);
             //刷新适配器
             goodsAdapter.notifyDataSetChanged();
             //把最后的状态进行回传
             onBusinessItemClickLisenter.onCallBack();
         }
     });
     一级控制二级
     //然后外层的商品类别条目需要控制里面的商品条目
     cb_business.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             //获取商品类别勾选状态
             //外层商品类别条目获取的关键:cb_business.isChecked()
             for (int i = 0; i < item.getList().size(); i++) {
                 item.getList().get(i).setGoodsChecked(cb_business.isChecked());
             }
             item.setBusinessChecked(cb_business.isChecked());
             notifyDataSetChanged();
             //把最后的状态进行回传
             onBusinessItemClickLisenter.onCallBack();
         }
     });
    

    }
    }
    二级适配
    package com.android.alex.shoppingcartdemo.ui.adapter;

import android.support.annotation.Nullable;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;

import com.android.alex.shoppingcartdemo.R;
import com.android.alex.shoppingcartdemo.data.beans.ShoppingCartBean;
import com.android.alex.shoppingcartdemo.ui.widget.CalculatorView;
import com.bumptech.glide.Glide;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;

import java.util.List;

/**

  • @author Alex

  • @date 2019/1/15.

  • GitHub:https://github.com/wangshuaialex
    */
    public class GoodsAdapter extends BaseQuickAdapter<ShoppingCartBean.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<ShoppingCartBean.DataBean.ListBean> data) {
    super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, final ShoppingCartBean.DataBean.ListBean item) {

     helper.setText(R.id.tv_goodsPrice, "¥:" + item.getPrice());
    
     helper.setText(R.id.tv_goodsTitle, item.getTitle());
     ImageView iv_goodsIcon = helper.getView(R.id.iv_goodsIcon);
     String imagesString = item.getImages();
     String[] imagesStr = imagesString.split("\\|");
     Glide.with(mContext).load(imagesStr[0]).into(iv_goodsIcon);
     //避免焦点抢占
     final CheckBox cb_goods = helper.getView(R.id.cb_goods);
     cb_goods.setOnCheckedChangeListener(null);
     cb_goods.setChecked(item.getGoodsChecked());
     //以接口的方式把状态回传给外层
     cb_goods.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
         @Override
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
             //Bean对象状态进行更新完毕
             item.setGoodsChecked(isChecked);
             onGoodsItemClickLisenter.onCallBack();
         }
     });
     //加减器
     CalculatorView calculatorView = helper.getView(R.id.cv_calculatorView);
     calculatorView.setOnCalCulatorLisenter(new CalculatorView.OnCalCulatorLisenter() {
         @Override
         public void onDecrese(int number) {
             //对新增的字段进行改动
             item.setDefalutNumber(number);
             onGoodsItemClickLisenter.onCallBack();
         }
    
         @Override
         public void onAdd(int number) {
             //对新增的字段进行改动
             item.setDefalutNumber(number);
             onGoodsItemClickLisenter.onCallBack();
         }
     });
    

    }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值