电商—实现二级购物车逻辑

商品和商家全选全不选逻辑

首先我们从接口上请求下来一个二级商品列表 需要包含着图片 价格 数量等数据
随后先实现第一个逻辑实现一级列表的全选全不选

	//这是全选全不选的点击事件
        		//设置了总价和总数量
        		float price = 0;
                int numAll = 0;
                boolean isChecked = mCheckbox.isChecked();//获取全选框的状态
                //吧商家全部选中
                for (int i = 0; i < list.size(); i++) {
                //给商家的list集合设置为和全选框一样的状态  
                //这个isChecked需要在bean类里边我们自己设置一个布尔类型的数据
                    list.get(i).setChecked(isChecked);
                    //获取商品的集合
                    List<ShopCarBean.DataBean.ListBean> childlist = this.list.get(i).getList();
                    for (int j = 0; j < childlist.size(); j++) {//吧商品全部选中
                        //吧商品的选择框全部给选中
                        childlist.get(j).setChecked(isChecked);
                        //获取子类的价格个数量
                        float p = childlist.get(j).getPrice();
                        int num = childlist.get(j).getNum();
                       //获取总价格和总数量
                        price = price + (p * num);
                        numAll = numAll + num;
                    }
                }
                if (!isChecked){
                //在全不选的时候给总价格和总数量归零
                    price=0.0f;
                    numAll=0;
                }
		//吧总数量和总价格展示上去
                mTvNum.setText("去结算("+numAll+")");
                mTvPrice.setText(price + "");
              //吧新的list集合传入到适配器当中
                shuJuAdp.setList(list);

商家适配器的接口回调

	 private ChildListListener childListListener;
	 //设置对外的方法
    public void setChildListListener(ChildListListener childListListener) {
        this.childListListener = childListListener;
    }
    //设置一个接口
    public interface ChildListListener {
        public void changeList(List<ShopCarBean.DataBean> list);
    }

给商家的选择框设置商品的全选全不选

	//商家的选择框状态
  viewHodel.mCheckbox.setChecked(list.get(i).isChecked());
      //商家选择框的点击事件
        viewHodel.mCheckbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //获取商家的选择框状态
                boolean ischecked = viewHodel.mCheckbox.isChecked();
                吧商家选择框的状态设置上去
                list.get(i).setChecked(ischecked);
                //获取商品集合
                List<ShopCarBean.DataBean.ListBean> listchild = ShuJuAdp.this.list.get(i).getList();
                //给商品选择状态全部选中
                for (int j = 0; j < listchild.size(); j++) {
                //吧商品集合的选择框设置成商家选择框一样的状态
                    listchild.get(j).setChecked(ischecked);
                }
                //刷新条目
                notifyItemChanged(i);
                //接口回调吧新的list转给子类适配器
                //这个方法在MainActivity中调用
                childListListener.changeList(list);
            }
        });

在MainActivity中调用商品的接口

商家全选回调给MainActivity的接口回调吧总价和数量进行联动

        shuJuAdp.setChildListListener(new ShuJuAdp.ChildListListener() {
            @Override
            public void changeList(List<ShopCarBean.DataBean> list) {
                //创建一个总价和总数量
                float price=0;
                int numAll=0;
                //循环选中商品的选中状态
                for (int i = 0; i <list.size(); i++) {
                //获取商品的集合
                    List<ShopCarBean.DataBean.ListBean> childlist = list.get(i).getList();
                    for (int j = 0; j <childlist.size() ; j++) {
                        //判断是否为true
                        if (childlist.get(j).isChecked()) {
                        //获取商品的价格和数量
                            float p = childlist.get(j).getPrice();
                            int n = childlist.get(j).getNum();
                          //获取总价和总数
                            numAll=numAll+n;
                            price=price+(p*n);
                        }
                    }
                }
                //给总价和总数赋值
                mTvNum.setText("去结算("+numAll+")");
                mTvPrice.setText(price + "");

            }
        });

商品适配器里的更改选择框的状态

        //商品选择框更改状态的点击事件
        viewHodel.mCheckbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //获取商品选择框的状态
                boolean isChecked = viewHodel.mCheckbox.isChecked();
                //更改list集合里边的状态
                list.get(i).setChecked(isChecked);
				//利用接口回调传到MainActivity的接口回调中改变总价和总数
                childListListener.changeList(list);
            }
        });

自定义View中的接口回调在商品适配器中调用

        viewHodel.shopCarAddView.setGaiBianShuLiang(new ShopCarAddView.GaiBianShuLiang() {
            @Override
            public void num(int num) {
             //改变商品的数量然后把list集合传输给MainActivity中的更改总价和总数
                list.get(i).setNum(num);
                childListListener.changeList(list);
            }
        });

自定义View中的总代码


public class ShopCarAddView extends RelativeLayout implements View.OnClickListener {

    private TextView nums;

    //代码里边实例化
    public ShopCarAddView(Context context) {
        super(context);
        init(context);
    }
//布局里面引入
    public ShopCarAddView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }
private Context context;
    private void init(Context context) {
    //toast需要用到的上下文获取
        this.context=context;
        //引入布局
        View view=View.inflate(context, R.layout.zidingyiview,null);
     	//获取数量
        nums = view.findViewById(R.id.ed_text);
        //给加减设置点击事件
        view.findViewById(R.id.tv_jia).setOnClickListener(this);
        view.findViewById(R.id.tv_jian).setOnClickListener(this);
       //添加view
        addView(view);
    }

    public void setNum(int num) {
            nums.setText(num+"");
    }

    @Override
    public void onClick(View v) {
    //判断点击事件是加还是减
        switch (v.getId()){
        //增加数量的点击事件
            case R.id.tv_jia:
            //获取目前的条目数量
                String numjia = nums.getText().toString().trim();
             	//给他强转成int类型的数据
                int njia = Integer.parseInt(numjia);
             //给数量增加
                njia++;
                //传输给更改数量的接口回调 在商品适配器中调用此方法
                gaiBianShuLiang.num(njia);
                //吧商品数量更改上去
                nums.setText(njia+"");
                break;
            case R.id.tv_jian:
                String numjian = nums.getText().toString().trim();
                int njian = Integer.parseInt(numjian);
                if (njian==1) {
                   Toast.makeText(context, "不可以小于1哦", Toast.LENGTH_SHORT).show();
                    return;
                }
                    njian--;
                gaiBianShuLiang.num(njian);
                    nums.setText(njian+"");
                break;
        }
    }
    //设置接口回调
    private GaiBianShuLiang gaiBianShuLiang;
    public void setGaiBianShuLiang(GaiBianShuLiang gaiBianShuLiang){
        this.gaiBianShuLiang=gaiBianShuLiang;
    }
    public interface  GaiBianShuLiang{
        void num(int num);
    }

}

设置条目数量的加减改变

    viewHodel.shopCarAddView.setGaiBianShuLiang(new ShopCarAddView.GaiBianShuLiang() {
            @Override
            public void num(int num) {
            //更改数量
                list.get(i).setNum(num);
               //吧刷新完的数据传给商品适配器
                childListListener.changeList(list);
            }
        });

设置商品全选中然后更改商家的选中状态

//调用商品的接口回调
        shuJuChildAdp.setChildListListener(new ShuJuChildAdp.ChildListListener() {
            @Override
            public void changeList(List<ShopCarBean.DataBean.ListBean> listChild) {
                //设置一个数量
                int num = 0;
                //判断商品条目有多少个只要有一个商品条目为选中状态就给数量加1
                for (int j = 0; j < listChild.size(); j++) {
                    if (listChild.get(j).isChecked()) {
                        num++;
                    }
                }
                //如果数量和商品数量一样则给商家的选择框设置为true
                if (num == listChild.size()) {
                    list.get(i).setChecked(true);
                } else {
                    list.get(i).setChecked(false);
                }
                //刷新当前条目
                notifyItemChanged(i);
                //吧集合传给MainActivity
                childListListener.changeList(list);
            }
        });

MainActivity总代码


public class MainActivity extends AppCompatActivity implements ConInterface.View, View.OnClickListener {

    private ConInterface.Presenter presenter;
    private RecyclerView mRecycler;
    /**
     * 全选
     */
    private CheckBox mCheckbox;
    /**
     * 0.0
     */
    private TextView mTvPrice;
    /**
     * 去结算(0)
     */
    private TextView mTvNum;
    private RelativeLayout mLayout;
    private ShuJuAdp shuJuAdp;
    private List<ShopCarBean.DataBean> list = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        presenter = new Presenter(this);
        shuJuAdp = new ShuJuAdp(this);
        mRecycler.setAdapter(shuJuAdp);
        presenter.toModel();

        mCheckbox.setOnClickListener(this);
        shuJuAdp.setChildListListener(new ShuJuAdp.ChildListListener() {
            @Override
            public void changeList(List<ShopCarBean.DataBean> list) {
                float price=0;
                int numAll=0;
                for (int i = 0; i <list.size(); i++) {
                   List<ShopCarBean.DataBean.ListBean> childlist = list.get(i).getList();
                    for (int j = 0; j <childlist.size() ; j++) {
                        if (childlist.get(j).isChecked()) {
                            Toast.makeText(MainActivity.this, childlist.get(j).isChecked()+"", Toast.LENGTH_SHORT).show();

                            float p = childlist.get(j).getPrice();
                            int n = childlist.get(j).getNum();
                            numAll=numAll+n;
                            price=price+(p*n);
                        }
                    }
                }
                mTvNum.setText("去结算("+numAll+")");
                mTvPrice.setText(price + "");

            }
        });
    }

    @Override
    public void showView(Object o) {
        ShopCarBean shopCarBean = (ShopCarBean) o;
        list = shopCarBean.getData();
        list.remove(0);
        LinearLayoutManager manager = new LinearLayoutManager(this);
        mRecycler.setLayoutManager(manager);
        shuJuAdp.setList(list);

    }


    //获取控件
    private void initView() {
        mRecycler = (RecyclerView) findViewById(R.id.recycler);
        mCheckbox = (CheckBox) findViewById(R.id.checkbox);
        mTvPrice = (TextView) findViewById(R.id.tv_price);
        mTvNum = (TextView) findViewById(R.id.tv_num);
        mLayout = (RelativeLayout) findViewById(R.id.layout);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.checkbox:
                float price = 0;
                int numAll = 0;
                boolean isChecked = mCheckbox.isChecked();//获取状态
                //全选吧商家和商品全部选中
                for (int i = 0; i < list.size(); i++) {
                    list.get(i).setChecked(isChecked);
                    List<ShopCarBean.DataBean.ListBean> childlist = this.list.get(i).getList();
                    for (int j = 0; j < childlist.size(); j++) {
                        childlist.get(j).setChecked(isChecked);
                        float p = childlist.get(j).getPrice();
                        int num = childlist.get(j).getNum();
                        price = price + (p * num);
                        numAll = numAll + num;
                    }
                }
                if (!isChecked){
                    price=0.0f;
                    numAll=0;
                }

                mTvNum.setText("去结算("+numAll+")");
                mTvPrice.setText(price + "");
                shuJuAdp.setList(list);
                break;
            default:
        }
    }
}

商家适配器总代码


public class ShuJuAdp extends RecyclerView.Adapter<ShuJuAdp.ViewHodel> {
    private List<ShopCarBean.DataBean> list = new ArrayList<>();
    private Context context;

    public ShuJuAdp(Context context) {
        this.context = context;
    }

    public void setList(List<ShopCarBean.DataBean> list) {
        this.list = list;
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public ShuJuAdp.ViewHodel onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.fuleiitem, null);
        ViewHodel viewHodel = new ViewHodel(view);
        return viewHodel;
    }

    @Override
    public void onBindViewHolder(@NonNull final ShuJuAdp.ViewHodel viewHodel, final int i) {

        viewHodel.name.setText(list.get(i).getSellerName());
        LinearLayoutManager manager = new LinearLayoutManager(context);
        viewHodel.recyclerChild.setLayoutManager(manager);
        ShuJuChildAdp shuJuChildAdp = new ShuJuChildAdp(context, list.get(i).getList());
        viewHodel.recyclerChild.setAdapter(shuJuChildAdp);

        //子类适配器接口回调
        shuJuChildAdp.setChildListListener(new ShuJuChildAdp.ChildListListener() {
            @Override
            public void changeList(List<ShopCarBean.DataBean.ListBean> listChild) {
                int num = 0;
                for (int j = 0; j < listChild.size(); j++) {
                    if (listChild.get(j).isChecked()) {
                        num++;
                    }
                }
                if (num == listChild.size()) {
                    list.get(i).setChecked(true);
                } else {
                    list.get(i).setChecked(false);
                }
                notifyItemChanged(i);
                childListListener.changeList(list);
            }
        });


        viewHodel.mCheckbox.setChecked(list.get(i).isChecked());
        viewHodel.mCheckbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean ischecked = viewHodel.mCheckbox.isChecked();
                list.get(i).setChecked(ischecked);
                List<ShopCarBean.DataBean.ListBean> listchild = ShuJuAdp.this.list.get(i).getList();
                for (int j = 0; j < listchild.size(); j++) {
                    listchild.get(j).setChecked(ischecked);
                }
                notifyItemChanged(i);
                //吧新的list转给子类适配器
                childListListener.changeList(list);
            }
        });

    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class ViewHodel extends RecyclerView.ViewHolder {
        CheckBox mCheckbox;
        RecyclerView recyclerChild;
        TextView name;

        public ViewHodel(@NonNull View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(R.id.tv_name);
            recyclerChild = (RecyclerView) itemView.findViewById(R.id.recycler_child);
            mCheckbox = (CheckBox) itemView.findViewById(R.id.checkbox);

        }
    }

    private ChildListListener childListListener;

    public void setChildListListener(ChildListListener childListListener) {
        this.childListListener = childListListener;
    }

    public interface ChildListListener {
        public void changeList(List<ShopCarBean.DataBean> list);

    }
}

商品适配器全代码


public class ShuJuChildAdp extends RecyclerView.Adapter<ShuJuChildAdp.ViewHodel> {
private List<ShopCarBean.DataBean.ListBean> list;
private Context context;
    public ShuJuChildAdp(Context context, List<ShopCarBean.DataBean.ListBean> list) {
        this.context=context;
        this.list=list;

    }

    @NonNull
    @Override
    public ShuJuChildAdp.ViewHodel onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.childitem, null);
        ViewHodel viewHodel=new ViewHodel(view);
        return viewHodel;
    }

    @Override
    public void onBindViewHolder(@NonNull final ShuJuChildAdp.ViewHodel viewHodel, final int i) {
            viewHodel.mTitle.setText(list.get(i).getTitle());
            viewHodel.mPrice.setText(list.get(i).getPrice()+"");
            viewHodel.mSimpleDraweeView.setImageURI(list.get(i).getImages());
            int num=list.get(i).getNum();
            viewHodel.shopCarAddView.setNum(num);

        boolean checked = list.get(i).isChecked();
        viewHodel.mCheckbox.setChecked(checked);
        viewHodel.mCheckbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean isChecked = viewHodel.mCheckbox.isChecked();
                list.get(i).setChecked(isChecked);
                childListListener.changeList(list);
            }
        });

        viewHodel.shopCarAddView.setGaiBianShuLiang(new ShopCarAddView.GaiBianShuLiang() {
            @Override
            public void num(int num) {
                list.get(i).setNum(num);
                childListListener.changeList(list);
            }
        });

    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class ViewHodel extends RecyclerView.ViewHolder {
        TextView mTitle, mPrice;
        SimpleDraweeView mSimpleDraweeView;
        CheckBox mCheckbox;
        private final ShopCarAddView shopCarAddView;

        public ViewHodel(@NonNull View itemView) {
            super(itemView);
            mCheckbox = (CheckBox) itemView.findViewById(R.id.checkbox);
            mSimpleDraweeView = (SimpleDraweeView) itemView.findViewById(R.id.simple);
            mTitle = (TextView) itemView.findViewById(R.id.tv_title);
            mPrice = (TextView) itemView.findViewById(R.id.tv_price);
            shopCarAddView = (ShopCarAddView) itemView.findViewById(R.id.addview);
        }
    }
    private ChildListListener childListListener;
    public void setChildListListener(ChildListListener childListListener){
        this.childListListener=childListListener;
    }
    public interface ChildListListener{
        public  void changeList(List<ShopCarBean.DataBean.ListBean> list);

    }

}

MainActivity布局全代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".mvp.view.MainActivity"
    android:orientation="vertical">


    <!--用来展示商家的-->
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/layout"
        />

    <RelativeLayout
        android:id="@+id/layout"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        >

        <CheckBox
            android:id="@+id/checkbox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="全选"
            android:layout_centerVertical="true"
            />

        <TextView
            android:layout_toRightOf="@+id/checkbox"
            android:id="@+id/tv_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#d43c3c"
            android:text="0.0"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            />

        <RelativeLayout
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:background="#d43c3c"
            >

            <TextView
                android:id="@+id/tv_num"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="去结算(0)"
                android:textColor="#ffffff"
                android:layout_centerInParent="true"
                />
        </RelativeLayout>


    </RelativeLayout>
</RelativeLayout>

商家布局全代码

<?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="match_parent">


    <RelativeLayout
        android:id="@+id/layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <CheckBox
            android:id="@+id/checkbox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/tv_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/checkbox"
            android:layout_centerVertical="true"
            />
    </RelativeLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_child"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/layout" />
</RelativeLayout>

商品布局

<?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="match_parent">

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

        <CheckBox
            android:id="@+id/checkbox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true" />

        <com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/simple"
            android:layout_width="100dp"
            android:layout_height="80dp"
            android:layout_toRightOf="@+id/checkbox"
            android:layout_centerVertical="true"
            />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@+id/simple"

            >

            <TextView
                android:id="@+id/tv_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                >

                <TextView
                    android:id="@+id/tv_price"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#d43c3c" />

                <!--自定义加减器-->
        <com.example.day13.utils.ShopCarAddView
            android:id="@+id/addview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true">

        </com.example.day13.utils.ShopCarAddView>

            </RelativeLayout>
        </RelativeLayout>
    </RelativeLayout>
</RelativeLayout>

自定义View的布局

<?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="match_parent">
    <RelativeLayout
        android:id="@+id/layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tv_jian"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="—"
            android:textSize="16sp"
            android:padding="5dp"
            />

        <TextView
            android:id="@+id/ed_text"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:textSize="14sp"
            android:gravity="center"
            android:layout_toRightOf="@+id/tv_jian"
            android:inputType="number"
            />

        <TextView
            android:id="@+id/tv_jia"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/ed_text"
            android:text="+"
            android:textSize="16sp"
            android:padding="5dp"
            />
    </RelativeLayout>
</RelativeLayout>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值