二级列表购物车

首先要展示列表 适配器嵌套适配器就不写了
主要的 先写一个加减器
Calculate

public class Calculate extends LinearLayout implements View.OnClickListener {

private final Button btn_add;
private final TextView tv_number;
private final Button btn_jian;

public Calculate(Context context, AttributeSet attrs) {
    super(context, attrs);
    View view = LayoutInflater.from(context).inflate(R.layout.aaa,this);
    btn_jian = view.findViewById(R.id.jian);
    tv_number = view.findViewById(R.id.number);
    btn_add = view.findViewById(R.id.jia);
    btn_add.setOnClickListener(this);
    btn_jian.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    String numberString = tv_number.getText().toString();
    int number = Integer.parseInt(numberString);
    switch (v.getId()){
        case R.id.jian:
            number--;
            if (number<0){
                number=0;
                tv_number.setText(String.valueOf(number));
            }
            tv_number.setText(String.valueOf(number));
            onNumberItemClickListener.jian(number);
            break;
        case R.id.jia:
            number++;
            tv_number.setText(String.valueOf(number));
            onNumberItemClickListener.jia(number);
            break;
    }
}

//创建接口
OnNumberItemClickListener onNumberItemClickListener;

public void setOnNumberItemClickListener(OnNumberItemClickListener onNumberItemClickListener){
    this.onNumberItemClickListener = onNumberItemClickListener;
}

public interface OnNumberItemClickListener{
    public void jian(int number);
    public void jia(int number);
}
public void setNum(int count){
    tv_number.setText(count+"");
}

}

在子布局里面调用

<?xml version="1.0" encoding="utf-8"?>



<CheckBox
    android:id="@+id/checkbox_goods"
    android:layout_width="25dp"
    android:layout_height="30dp"
    android:layout_marginLeft="5dp"
    android:layout_marginTop="10dp"

    />
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginLeft="30dp"
    android:background="@drawable/selector_list"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:layout_marginRight="10dp"
    >
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/image_goods"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:layout_marginBottom="10dp"
        app:placeholderImage="@mipmap/ic_launcher_round"
        />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp">

        <TextView
            android:id="@+id/text_goodsName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:maxEms="30"
            android:singleLine="true"
            android:text="名称"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/text_goodsPrice"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_marginStart="0dp"
            android:layout_marginLeft="0dp"
            android:layout_marginTop="70dp"
            android:text="价格"
            android:textColor="#f00"
            android:textSize="14sp" />

        <com.example.tt0406.ui.weight.Calculate
            android:id="@+id/caculete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="40dp"
            android:layout_marginLeft="150dp"
            >

        </com.example.tt0406.ui.weight.Calculate>
    </RelativeLayout>

</LinearLayout>
调用之后是这样 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190406204118358.png)

子适配器
public class ShopAdapter extends BaseQuickAdapter<Shop.DataBean.ListBean,BaseViewHolder> {
private Calculate caculete;
//创建接口

OnShopClickListener onShopClickListener;

public void OnShopClickListener(OnShopClickListener onShopClickListener){
    this.onShopClickListener = onShopClickListener;
}
public interface OnShopClickListener{
    public void onCallback();
}

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

@Override
protected void convert(BaseViewHolder helper, final Shop.DataBean.ListBean item) {
    helper.setText(R.id.text_goodsName,item.getTitle());
    helper.setText(R.id.text_goodsPrice,item.getPrice()+"");
    SimpleDraweeView simpleDraweeView = helper.getView(R.id.image_goods);
    simpleDraweeView.setImageURI(item.getImages());

    CheckBox checkbox_goods = helper.getView(R.id.checkbox_goods);
    checkbox_goods.setOnClickListener(null);
    checkbox_goods.setChecked(item.getGoodsChecked());

    checkbox_goods.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            item.setGoodsChecked(isChecked);
            onShopClickListener.onCallback();
        }
    });

    //加减器
    caculete = helper.getView(R.id.caculete);
    caculete.setOnNumberItemClickListener(new Calculate.OnNumberItemClickListener() {
        @Override
        public void jian(int number) {
            item.setDefaultNumber(number);
            onShopClickListener.onCallback();
        }

        @Override
        public void jia(int number) {
            item.setDefaultNumber(number);
            onShopClickListener.onCallback();
        }
    });

}

}

主适配器
public class StoreAdapter extends BaseQuickAdapter<Shop.DataBean,BaseViewHolder> {

OnStoresClickListener onStoresClickListener;

public void OnStoresClickListener(OnStoresClickListener onStoresClickListener){
    this.onStoresClickListener = onStoresClickListener;
}

public interface OnStoresClickListener{
    public void onCallBack();
}

private RecyclerView recyclerView_store;

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

@Override
protected void convert(BaseViewHolder helper, final Shop.DataBean item) {
    helper.setText(R.id.store_name,item.getSellerName());
    recyclerView_store = helper.getView(R.id.recyclerView_store);

    List<Shop.DataBean.ListBean> beans = item.getList();
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext,LinearLayoutManager.VERTICAL,false);
    recyclerView_store.setLayoutManager(linearLayoutManager);

    final ShopAdapter shopAdapter = new ShopAdapter(R.layout.item_shop,beans);
    recyclerView_store.setAdapter(shopAdapter);

    //避免焦点抢站
    final CheckBox check_store = helper.getView(R.id.check_store);
    check_store.setOnCheckedChangeListener(null);

    check_store.setChecked(item.getStoreChecked());

  shopAdapter.OnShopClickListener(new ShopAdapter.OnShopClickListener() {
      @Override
      public void onCallback() {
          boolean result = true;
          for (int i=0;i<item.getList().size();i++){
              result = result&item.getList().get(i).getGoodsChecked();
          }
          check_store.setChecked(result);
          shopAdapter.notifyDataSetChanged();
          onStoresClickListener.onCallBack();
      }
  });

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

}

主页面
public class FragShop extends Fragment implements ShopContract.ShopView,View.OnClickListener {

@BindView(R.id.recyclerView)
RecyclerView recyclerView;
@BindView(R.id.all)
CheckBox all;
@BindView(R.id.price)
TextView price;
@BindView(R.id.jie)
Button jie;
Unbinder unbinder;
private ShopContract.ShopPresenter shopPresenter;
private List<Shop.DataBean> beans;
private StoreAdapter storeAdapter;


@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.frag02, container, false);
    Fresco.initialize(getActivity());
    recyclerView = view.findViewById(R.id.recyclerView);
    shopPresenter = new ShopPresenterImpl();
    shopPresenter.attachView(this);
    shopPresenter.requsetShopData();
    unbinder = ButterKnife.bind(this, view);
    return view;
}

@Override
public void showShopData(String message) {
    
    all.setOnCheckedChangeListener(null);
    all.setOnClickListener(this);
    Gson gson = new Gson();
    Shop shop = gson.fromJson(message, Shop.class);
    beans = shop.getData();
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(linearLayoutManager);
    storeAdapter = new StoreAdapter(R.layout.item_store, beans);
    recyclerView.setAdapter(storeAdapter);


    storeAdapter.OnStoresClickListener(new StoreAdapter.OnStoresClickListener() {
        @Override
        public void onCallBack() {
            boolean result = true;
            for (int i = 0; i< beans.size(); i++){
                boolean businessChecked = beans.get(i).getStoreChecked();
                result = result&businessChecked;
                for (int j = 0; j< beans.get(i).getList().size(); j++){
                    boolean goodChecked = beans.get(i).getList().get(j).getGoodsChecked();
                    result = result&goodChecked;
                }
            }
            all.setChecked(result);
            calculateTotalCount();
        }
    });

}

private void calculateTotalCount() {
    double totalCount = 0;
    //外层条目
    for (int i = 0; i < beans.size(); i++) {
        //内层条目
        for (int j = 0; j < beans.get(i).getList().size(); j++) {
            //判断内层条目是否勾选
            if (beans.get(i).getList().get(j).getGoodsChecked() == true){
                //获取商品数据*商品价格
                double price = beans.get(i).getList().get(j).getPrice();
                int defalutNumber = beans.get(i).getList().get(j).getDefaultNumber();
                double goodsPrice = price * defalutNumber;
                totalCount = totalCount+goodsPrice;
            }
        }
    }
    price.setText("合计:"+String.valueOf(totalCount));
}

@Override
public void onDestroyView() {
    super.onDestroyView();
    unbinder.unbind();
}

@Override
public void onClick(View v) {
    for (int i=0;i<beans.size();i++){
        beans.get(i).setStoreChecked(all.isChecked());
        for (int j=0;j<beans.get(i).getList().size();j++){
            beans.get(i).getList().get(j).setGoodsChecked(all.isChecked());
        }
        storeAdapter.notifyDataSetChanged();
        calculateTotalCount();
    }
}

}
Bean包
public class Shop {

/**
 * msg : 请求成功
 * code : 0

private String msg;
private String code;
private List<DataBean> data;

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

public List<DataBean> getData() {
    return data;
}

public void setData(List<DataBean> data) {
    this.data = data;
}

public static class DataBean {
    /**
     * list : 
     * sellerName : 商家1
     * sellerid : 1
     */

    private String sellerName;
    private String sellerid;
    private List<ListBean> list;
    private boolean storeChecked;


    public boolean getStoreChecked() {
        return storeChecked;
    }

    public void setStoreChecked(boolean storeChecked) {
        this.storeChecked = storeChecked;
    }

    public String getSellerName() {
        return sellerName;
    }

    public void setSellerName(String sellerName) {
        this.sellerName = sellerName;
    }

    public String getSellerid() {
        return sellerid;
    }

    public void setSellerid(String sellerid) {
        this.sellerid = sellerid;
    }

    public List<ListBean> getList() {
        return list;
    }


    public void setList(List<ListBean> list) {
        this.list = list;
    }

    public static class ListBean {
        /**
         * bargainPrice : 99
         * createtime : 2017-10-14T21:38:26
         * detailUrl : http://172.17.8.100/images/small/commodity/xbsd/sjb/5/1.jpg
         * images : http://172.17.8.100/images/small/commodity/xbsd/sjb/5/1.jpg
         * num : 2
         * pid : 45
         * price : 2999
         * pscid : 39
         * selected : 0
         * sellerid : 1
         * subhead : 高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!
         * title : 一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机
         */

        private double bargainPrice;
        private String createtime;
        private String detailUrl;
        private String images;
        private int num;
        private int pid;
        private int price;
        private int pscid;
        private int selected;
        private int sellerid;
        private String subhead;
        private String title;
        private boolean goodsChecked;
        private int defaultNumber = 1;

        public int getDefaultNumber() {
            return defaultNumber;
        }

        public void setBargainPrice(double bargainPrice) {
            this.bargainPrice = bargainPrice;
        }

        public void setDefaultNumber(int defaultNumber) {
            this.defaultNumber = defaultNumber;
        }

        public boolean getGoodsChecked() {
            return goodsChecked;
        }

        public void setGoodsChecked(boolean goodsChecked) {
            this.goodsChecked = goodsChecked;
        }

        public double getBargainPrice() {
            return bargainPrice;
        }

        public void setBargainPrice(int bargainPrice) {
            this.bargainPrice = bargainPrice;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public String getDetailUrl() {
            return detailUrl;
        }

        public void setDetailUrl(String detailUrl) {
            this.detailUrl = detailUrl;
        }

        public String getImages() {
            return images;
        }

        public void setImages(String images) {
            this.images = images;
        }

        public int getNum() {
            return num;
        }

        public void setNum(int num) {
            this.num = num;
        }

        public int getPid() {
            return pid;
        }

        public void setPid(int pid) {
            this.pid = pid;
        }

        public int getPrice() {
            return price;
        }

        public void setPrice(int price) {
            this.price = price;
        }

        public int getPscid() {
            return pscid;
        }

        public void setPscid(int pscid) {
            this.pscid = pscid;
        }

        public int getSelected() {
            return selected;
        }

        public void setSelected(int selected) {
            this.selected = selected;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }

        public String getSubhead() {
            return subhead;
        }

        public void setSubhead(String subhead) {
            this.subhead = subhead;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }
    }
}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值