很久之前的代码了,拉出来晾晾!


购物车大致思路:

分为:商品、店铺、全选;

商品全部选中后--店铺自动选中;商品未全部选中(若有一个商品未选中)--店铺不选中。

店铺全部选中后--全选自动选中;店铺未全部选中(若有一个店铺未选中)--全选不选中。

选中店铺 -- 店铺中的商品全部选中。

全选选中 -- 店铺全部选中。(全部选中);

我是使用RecyclerView来写的,适配器用的是BaseRecyclerViewAdapterHelper;当然ListView也能实现,思路代码什么的都一样。

好,直接上代码:

核心代码:

package com.example.admin.ccb.fragment;


import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;

import com.bigkoo.pickerview.OptionsPickerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.admin.ccb.R;
import com.example.admin.ccb.activity.GoodsDatailsActivity;
import com.example.admin.ccb.activity.ShopHomeActivity;
import com.example.admin.ccb.base.BaseFragment;
import com.example.admin.ccb.base.ShopPingCartBean;
import com.example.admin.ccb.utils.ResCcb;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * Ccb simple {@link Fragment} subclass.
 */
public class SpcFragment extends BaseFragment {


    private SpcAdapter spcAp;
    private ShopPingCartBean spcs;
    private CheckBox cbAll;
    private TextView jiesuan;

    @Override
    protected View initContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_spc, container, false);
    }
    private RecyclerView rvShop;
    @Override
    public void initView(View view) {
      rvShop = view.findViewById(R.id.rvShop);
      cbAll = view.findViewById(R.id.spc_cb_all);
        jiesuan = view.findViewById(R.id.jiesuan);
      rvShop.setLayoutManager(new LinearLayoutManager(mContext,LinearLayoutManager.VERTICAL, false));
        spcAp = new SpcAdapter(R.layout.item_spc_shop);
      rvShop.setAdapter(spcAp);
    }
     
    @Override
    public void loadData() {
        Random random = new Random();
        spcs = new ShopPingCartBean();
        spcs.shopList = new ArrayList<>();
        for (int i = 0; i < ResCcb.getMenus().size(); i++) {   //添加店铺
            ShopPingCartBean.ShopBean shop = new ShopPingCartBean.ShopBean();
            shop.shopName = ResCcb.getMenus().get(i);
            int jj = random.nextInt(5)+1;
            shop.carList = new ArrayList<>();
            for (int j = 0; j < jj; j++) {  //添加商品
                ShopPingCartBean.ShopBean.CarListBean goods = new ShopPingCartBean.ShopBean.CarListBean();
                goods.title = ResCcb.getspcGoodsImages().get(random.nextInt(ResCcb.getspcGoodsImages().size()-1));
                goods.icon = ResCcb.getSpcImages().get(random.nextInt(ResCcb.getSpcImages().size()-1));
                shop.carList.add(goods);
            }
            spcs.shopList.add(shop);
        }
        spcAp.setNewData(spcs.shopList);
    }

    @Override
    public void initListener() {
        cbAll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                boolean is = cbAll.isChecked();
                for (int i = 0; i < spcs.shopList.size(); i++) {
                    spcs.shopList.get(i).isSelectShop = is;
                    for (int j = 0; j < spcs.shopList.get(i).carList.size(); j++) {
                        spcs.shopList.get(i).carList.get(j).isSelectGoods = is;
                    }
                }
                spcAp.notifyDataSetChanged();
            }
        });
    }

    /**
     * 适配器
     */
    public class SpcAdapter extends BaseQuickAdapter<ShopPingCartBean.ShopBean,BaseViewHolder> {
        public SpcAdapter(int layoutResId) {
            super(layoutResId);
        }

        @Override
        protected void convert(final BaseViewHolder helper, ShopPingCartBean.ShopBean item) {
            helper.setText(R.id.tvShop,item.shopName)
                    .setOnClickListener(R.id.tvShop, new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            mContext.startActivity(new Intent(mContext, ShopHomeActivity.class));
                        }
                    });
            final CheckBox cbShop = helper.getView(R.id.spc_cb_shops);
            cbShop.setChecked(item.isSelectShop);
            cbShop.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    spcs.shopList.get(helper.getAdapterPosition()).isSelectShop = cbShop.isChecked();
                    for (int i = 0; i < spcs.shopList.get(helper.getAdapterPosition()).carList.size(); i++) {  //改变这个店铺中所有商品的数据
                        spcs.shopList.get(helper.getAdapterPosition()).carList.get(i).isSelectGoods = cbShop.isChecked();
                    }
                     //遍历有所的店铺集合,看是否全部选中,若选中则改变全选标记
                    List<Boolean> shoplist = new ArrayList<>();
                    for (int i = 0; i < spcs.shopList.size(); i++) {
                        shoplist.add(spcs.shopList.get(i).isSelectShop);
                    }
                    if (shoplist.contains(false)){
                        cbAll.setChecked(false);
                    }else{
                        cbAll.setChecked(true);
                    }
                    notifyDataSetChanged();
                }
            });
            RecyclerView rvGoods = helper.getView(R.id.rvGoods);
            rvGoods.setLayoutManager(new LinearLayoutManager(mContext,LinearLayoutManager.VERTICAL,false));
            GoodsAdapter goodsAp = new GoodsAdapter(R.layout.item_spc_goods, helper.getAdapterPosition());
            rvGoods.setAdapter(goodsAp);
            goodsAp.setNewData(item.carList);

        }
    }

    class GoodsAdapter extends BaseQuickAdapter<ShopPingCartBean.ShopBean.CarListBean,BaseViewHolder>{
        private int positionShop;
        public GoodsAdapter(int layoutResId,int positionShop) {
            super(layoutResId);
            this.positionShop = positionShop;
        }

        @Override
        protected void convert(final BaseViewHolder helper, ShopPingCartBean.ShopBean.CarListBean item) {
            helper.setText(R.id.spc_tv_shop_name_msg,item.title)
                   .setOnClickListener(R.id.rl, new View.OnClickListener() {
                       @Override
                       public void onClick(View view) {
                           mContext.startActivity(new Intent(mContext, GoodsDatailsActivity.class));
                       }
                   });
            helper.setImageResource(R.id.spc_iv_page,item.icon);
            final CheckBox cbGoods = helper.getView(R.id.spc_cb_goods);
            cbGoods.setChecked(item.isSelectGoods);
            cbGoods.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    spcs.shopList.get(positionShop).carList.get(helper.getAdapterPosition()).isSelectGoods = cbGoods.isChecked();
                    //改变这个商品的选中状态后,遍历看是否全部选中,若全部选中则改变店铺的选中状态
                    List<Boolean> goodslist = new ArrayList<>();
                    for (int i = 0; i < spcs.shopList.get(positionShop).carList.size(); i++) {
                        goodslist.add(spcs.shopList.get(positionShop).carList.get(i).isSelectGoods);
                    }
                    if (goodslist.contains(false)){
                        spcs.shopList.get(positionShop).isSelectShop = false;
                    }else{
                        spcs.shopList.get(positionShop).isSelectShop = true;
                    }
                    //改变这个店铺的选中状态后,遍历看是否全部选中,若全部选中则改变全选的选中状态
                    List<Boolean> shoplist = new ArrayList<>();
                    for (int i = 0; i < spcs.shopList.size(); i++) {
                        shoplist.add(spcs.shopList.get(i).isSelectShop);
                    }
                    if (shoplist.contains(false)){
                        cbAll.setChecked(false);
                    }else{
                        cbAll.setChecked(true);
                    }
                    spcAp.notifyDataSetChanged();
                    notifyDataSetChanged();
                }
            });
        }
    }
}

主界面布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.admin.ccb.fragment.SpcFragment">

    <RelativeLayout
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp44">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textSize="16dp"
            android:textColor="#212121"
            android:gravity="center"
            android:text="购物车" />
        <View
            android:layout_alignParentBottom="true"
            style="@style/Line_e0e0e0_Horizontal"/>
    </RelativeLayout>
    <View
        android:layout_below="@id/title"
        style="@style/Line_e0e0e0_Horizontal"/>
    <RelativeLayout
        android:id="@+id/layout_bottom"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:background="@color/colorWhite"
        android:layout_height="45dp">
       <View
           android:layout_width="match_parent"
           android:layout_height="1dp"
           android:background="@color/defaultDividerLine"
           />
        <CheckBox
            android:id="@+id/spc_cb_all"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:paddingLeft="@dimen/side_distance"
            android:paddingRight="@dimen/side_distance"
            style="@style/spc_checkbox_style"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="全选"
            android:layout_toRightOf="@id/spc_cb_all"
            android:layout_centerVertical="true"
            android:textColor="@color/color_666666"
            android:textSize="13dp"
            />

        <TextView
            android:id="@+id/jiesuan"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:text="结算"
            android:gravity="center"
            android:textSize="@dimen/dp16"
            android:background="@color/mainColor"
            android:textColor="@color/colorWhite"
            android:layout_centerVertical="true"
            android:layout_alignParentRight="true"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="¥:1016.69"
            android:layout_toLeftOf="@id/jiesuan"
            android:layout_marginRight="@dimen/dp5"
            android:layout_centerVertical="true"
            android:layout_marginLeft="@dimen/dp4"
            android:textColor="@color/mainColor"
            android:textSize="15dp"
            />

    </RelativeLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rvShop"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/title"
        android:layout_above="@id/layout_bottom"
        ></android.support.v7.widget.RecyclerView>

</RelativeLayout>

外层RecyclerView(店铺)的item:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="#ffffff"
    android:descendantFocusability="blocksDescendants"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:orientation="horizontal"
        android:gravity="center_vertical"
        >
        <CheckBox
            android:id="@+id/spc_cb_shops"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:paddingLeft="@dimen/side_distance"
            android:paddingRight="@dimen/side_distance"
            style="@style/spc_checkbox_style"
            />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@mipmap/orderfrom_shangdian"
            />
        <TextView
            android:id="@+id/tvShop"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="5dp"
            android:paddingRight="@dimen/side_distance"
            android:gravity="center_vertical"
            android:text="ShopName"
            android:textColor="#666666"
            android:textSize="15dp"
            />
    </LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/defaultBackground"
    >
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rvGoods"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
    </android.support.v7.widget.RecyclerView>
</LinearLayout>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="44dp"
    android:gravity="center_vertical"
    >
        <TextView
            android:id="@+id/spc_tv_zong_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="16dp"
            android:textColor="@color/mainColor"
            android:layout_alignParentRight="true"
            android:text="100.00"
            android:layout_marginRight="@dimen/side_distance"
            />
    <TextView
        android:id="@+id/spc_tv_price_money"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="总价:"
        android:textColor="#666666"
        android:textSize="15dp"
        android:layout_toLeftOf="@id/spc_tv_zong_price"
        android:layout_marginRight="10dp"
        />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_toLeftOf="@id/spc_tv_price_money"
        android:layout_marginRight="15dp"
        >
        <TextView
            android:id="@+id/spc_tv_shop_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#666666"
            android:textSize="15dp"
            android:text="共2件商品"
            />
    </LinearLayout>
</RelativeLayout>
    <View
       style="@style/Line_e0e0e0_Horizontal"/>
</LinearLayout>

内层商品Item;

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/defaultBackground"
    android:descendantFocusability="blocksDescendants"
    >

    <RelativeLayout
        android:id="@+id/rl"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:paddingTop="5dp">
        <View
            android:layout_alignParentBottom="true"
            style="@style/Line_e0e0e0_Horizontal"/>
        <CheckBox
            android:id="@+id/spc_cb_goods"
            style="@style/spc_checkbox_style"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:paddingLeft="@dimen/side_distance"
            android:paddingRight="@dimen/side_distance" />

        <ImageView
            android:id="@+id/spc_iv_page"
            android:layout_width="85dp"
            android:layout_height="85dp"
            android:layout_toRightOf="@id/spc_cb_goods"
            android:layout_alignParentBottom="true"
            android:src="@mipmap/default_icon" />

            <TextView
                android:id="@+id/spc_tv_shop_name_msg"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="@dimen/side_distance"
                android:layout_marginTop="8dp"
                android:layout_toRightOf="@id/spc_iv_page"
                android:lines="2"
                android:text="title"
                android:lineSpacingExtra="1dp"
                android:textColor="@color/defaultTextview"
                android:textSize="13dp" />

            <TextView
                android:id="@+id/spc_tv_pinlei"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="已选:28码"
                android:layout_below="@id/spc_tv_shop_name_msg"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="3dp"
                android:layout_toRightOf="@id/spc_iv_page"
                android:textColor="@color/defaultTextview"
                android:textSize="11dp"
                android:visibility="visible" />

                <TextView
                    android:id="@+id/spc_tv_zong_price"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="¥:109.89"
                    android:layout_below="@id/spc_tv_pinlei"
                    android:layout_marginLeft="10dp"
                    android:layout_toRightOf="@id/spc_iv_page"
                    android:layout_marginTop="@dimen/dp4"
                    android:textColor="@color/mainColor"
                    android:textSize="16dp" />


        <Button
                android:id="@+id/spc_btn_comm_count_jian"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_alignTop="@+id/spc_tv_pinlei"
                android:layout_toLeftOf="@+id/spc_et_comm_count"
                android:layout_toStartOf="@+id/spc_et_comm_count"
                android:background="#ffffff"
                android:text="一"
                android:textColor="@color/defaultTextview"
                android:textSize="16dp" />

        <TextView
                android:id="@+id/spc_et_comm_count"
                android:layout_width="44dp"
                android:layout_height="32dp"
                android:layout_alignTop="@+id/spc_tv_pinlei"
                android:layout_toLeftOf="@+id/spc_btn_comm_count_jia"
                android:layout_toStartOf="@+id/spc_btn_comm_count_jia"
                android:background="#ffffff"
                android:gravity="center"
                android:text="0"
                android:textColor="@color/defaultTextview"
                android:textSize="16dp" />

        <Button
                android:id="@+id/spc_btn_comm_count_jia"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_alignParentRight="true"
                android:layout_alignTop="@+id/spc_tv_pinlei"
                android:layout_marginRight="@dimen/side_distance"
                android:background="#ffffff"
                android:text="+"
                android:textColor="@color/defaultTextview"
                android:textSize="16dp"
                android:layout_alignRight="@+id/spc_tv_shop_name_msg"
                android:layout_alignEnd="@+id/spc_tv_shop_name_msg" />

    </RelativeLayout>


</RelativeLayout>

好了,打完收工;其中ResCcb是我的制造的假数据源;代码我已上传Github;

完整代码:https://github.com/CuiChenbo/CcMall

posted on 2018-03-28 15:07  香蕉你个博纳纳  阅读(1384)  评论(0)    收藏  举报