购物车逻辑

1.第一个RecyclerView布局

<?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">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/layout">
    </android.support.v7.widget.RecyclerView>
    <RelativeLayout
        android:id="@+id/layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true">
        <CheckBox
            android:id="@+id/checkbox_all"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:text="全选"/>
        <TextView
            android:id="@+id/price_all"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@+id/checkbox_all"
            android:text="合计:"/>

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

            <TextView
                android:id="@+id/money"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="去结算"
                android:textColor="#ffffff"
                />

        </RelativeLayout>
    </RelativeLayout>

</RelativeLayout>
2.activity或者fragment的方法
package com.example.liangwc.view.fragment;

import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;

import com.example.liangwc.R;
import com.example.liangwc.model.bean.GoodBean;
import com.example.liangwc.presenter.GoodPresenter;
import com.example.liangwc.view.adapter.MyAdapter;
import com.example.liangwc.view.interfaces.IGoodView;

import java.util.List;

public class FragGwc extends BaseFragment implements IGoodView<GoodBean> {

    private RecyclerView recycler;
    private CheckBox checkBox_all;
    private TextView price_all;
    private TextView money;
    private GoodPresenter goodPresenter;
    private MyAdapter myAdapter;
    private List<GoodBean.DataBean> data;

    @Override
    protected int bindLayout() {
        return R.layout.fraggwc;
    }

    @Override
    protected void initView() {
        recycler = getActivity().findViewById(R.id.recycler);
        checkBox_all = getActivity().findViewById(R.id.checkbox_all);
        price_all = getActivity().findViewById(R.id.price_all);
        money = getActivity().findViewById(R.id.money);
    }

    @Override
    protected void initData() {
        goodPresenter = new GoodPresenter();
        goodPresenter.loadDataGood();
        goodPresenter.setView(this);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
        linearLayoutManager.setOrientation(linearLayoutManager.VERTICAL);
        recycler.setLayoutManager(linearLayoutManager);
        myAdapter = new MyAdapter(getActivity());
        recycler.setAdapter(myAdapter);

        //全选
        checkBox_all.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean checked = checkBox_all.isChecked();
                float allprice=0;
                int allNum=0;
                for (int i = 0; i < data.size(); i++) {
                    data.get(i).setChecked(checked);
                    List<GoodBean.DataBean.ListBean> list = data.get(i).getList();
                    for (int j = 0; j < list.size(); j++) {
                        list.get(j).setChecked(checked);
                        if (checked){//选中计算总价
                            float price = list.get(j).getPrice();
                            int num = list.get(j).getNum();
                            allprice=allprice+price*num;
                            allNum=allNum+num;
                        }else{
                            allNum=0;
                            allprice=0;
                        }
                    }
                }
                price_all.setText(allprice+"");
                money.setText("去结算("+allNum+")");
                myAdapter.setData(data);
            }
        });

        myAdapter.setOnCallBackListener(new MyAdapter.OnCallBackListener() {
            @Override
            public void changeData(List<GoodBean.DataBean> datalist) {
                float allprice=0;
                int allNum=0;
                int xuan=0;
                for (int i = 0; i < datalist.size(); i++) {
                    boolean checked = datalist.get(i).isChecked();
                    if (checked){
                        xuan++;
                        List<GoodBean.DataBean.ListBean> listC = datalist.get(i).getList();
                        for (int j = 0; j < listC.size(); j++) {
                            float price = listC.get(j).getPrice();
                            int num = listC.get(j).getNum();
                            allprice = allprice + price * num;
                            allNum = allNum + num;
                        }
                    }else {//商家未选中,有可能商家里面的商品选中了
                        List<GoodBean.DataBean.ListBean> listC = datalist.get(i).getList();
                        for (int j = 0; j < listC.size(); j++) {
                            if (listC.get(j).isChecked()) {
                                float price = listC.get(j).getPrice();
                                int num = listC.get(j).getNum();
                                allprice = allprice + price * num;
                                allNum = allNum + num;
                            }
                        }
                    }
                    if (xuan==datalist.size()){
                        checkBox_all.setChecked(true);
                    }else{
                        checkBox_all.setChecked(false);
                    }
                    price_all.setText(allprice + "");//设置总价
                    money.setText("去结算(" + allNum + ")");//设置数量
                }
            }
        });
    }
    @Override
    protected void bindEvent() {

    }

    @Override
    public void onSuccess(GoodBean goodBean) {
        if (goodBean!=null){
            data = goodBean.getData();
            myAdapter.setData(data);
        }
    }

    @Override
    public void onError(String err) {

    }
}

3.父类的adapter

package com.example.liangwc.view.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;

import com.example.liangwc.R;
import com.example.liangwc.model.bean.GoodBean;

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


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyAdapterViewHolder> {
    private Context context;
    private List<GoodBean.DataBean> datalist=new ArrayList<>();
    private ZiAdapter ziAdapter;

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

    @NonNull
    @Override
    public MyAdapter.MyAdapterViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view=View.inflate(context,R.layout.fu_itme,null);
        MyAdapterViewHolder myAdapterViewHolder = new MyAdapterViewHolder(view);
        return myAdapterViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull final MyAdapter.MyAdapterViewHolder myAdapterViewHolder, final int i) {
        myAdapterViewHolder.f_title.setText(datalist.get(i).getSellerName());
        myAdapterViewHolder.f_checkbox.setChecked(datalist.get(i).isChecked());

        List<GoodBean.DataBean.ListBean> list = datalist.get(i).getList();
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
        linearLayoutManager.setOrientation(linearLayoutManager.VERTICAL);
        myAdapterViewHolder.z_recycler.setLayoutManager(linearLayoutManager);
        ziAdapter = new ZiAdapter(context);
        ziAdapter.setData(list);
        myAdapterViewHolder.z_recycler.setAdapter(ziAdapter);

        //父类全选反选
        myAdapterViewHolder.f_checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean checked = myAdapterViewHolder.f_checkbox.isChecked();
                datalist.get(i).setChecked(checked);
                List<GoodBean.DataBean.ListBean> beans = datalist.get(i).getList();
                for (int i = 0; i < beans.size(); i++) {
                    beans.get(i).setChecked(checked);
                }
                if (mOnCallBackListener!=null){
                    mOnCallBackListener.changeData(datalist);
                }
                notifyDataSetChanged();
            }
        });
        //子类商品是不是全部选中
        ziAdapter.setOnCallBackListener(new ZiAdapter.OnCallBackListener() {
            @Override
            public void changeData(List<GoodBean.DataBean.ListBean> listShop) {
                int checkedNum=0;
                for (int i = 0; i < listShop.size(); i++) {
                    boolean checked = listShop.get(i).isChecked();
                    if (checked){
                        checkedNum++;
                    }
                }
                if (checkedNum==listShop.size()){
                    datalist.get(i).setChecked(true);
                }else{
                    datalist.get(i).setChecked(false);
                }

                notifyItemChanged(i);
                if (mOnCallBackListener!=null){
                    mOnCallBackListener.changeData(datalist);
                }
            }
        });
    }

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

    public void setData(List<GoodBean.DataBean> data) {
        if (data!=null){
            datalist.clear();
            datalist.addAll(data);
            notifyDataSetChanged();
        }
    }

    public class MyAdapterViewHolder extends RecyclerView.ViewHolder {
        CheckBox f_checkbox;
        TextView f_title;
        RecyclerView z_recycler;
        public MyAdapterViewHolder(@NonNull View itemView) {
            super(itemView);
            f_title = itemView.findViewById(R.id.f_title);
            f_checkbox = itemView.findViewById(R.id.f_checkbox);
            z_recycler = itemView.findViewById(R.id.z_recycler);
        }
    }
    private OnCallBackListener mOnCallBackListener;

    public void setOnCallBackListener(OnCallBackListener mOnCallBackListener){
        this.mOnCallBackListener=mOnCallBackListener;
    }

    public interface OnCallBackListener{
        void changeData(List<GoodBean.DataBean> datalist);
    }
}

4.父类的布局

<?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="match_parent"
        android:layout_height="30dp">
        <CheckBox
            android:id="@+id/f_checkbox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"/>
        <TextView
            android:id="@+id/f_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/f_checkbox"/>
    </RelativeLayout>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/z_recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/layout"></android.support.v7.widget.RecyclerView>

</RelativeLayout>

5.子类的adapter

package com.example.liangwc.view.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.liangwc.R;
import com.example.liangwc.model.bean.GoodBean;

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


public class ZiAdapter extends RecyclerView.Adapter<ZiAdapter.ZiAdapterViewHolder> {
    private Context context;
    private List<GoodBean.DataBean.ListBean> listdata=new ArrayList<>();
    private OnCallBackListener listener;

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

    @NonNull
    @Override
    public ZiAdapter.ZiAdapterViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view=View.inflate(context, R.layout.zi_itme,null);
        ZiAdapterViewHolder ziAdapterViewHolder = new ZiAdapterViewHolder(view);
        return ziAdapterViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull final ZiAdapter.ZiAdapterViewHolder ziAdapterViewHolder, final int i) {
        ziAdapterViewHolder.z_title.setText(listdata.get(i).getTitle());
        ziAdapterViewHolder.z_price.setText("¥"+listdata.get(i).getPrice()+"");
        ziAdapterViewHolder.z_count.setText(listdata.get(i).getNum()+"");
        Glide.with(context).load(listdata.get(i).getImages()).into(ziAdapterViewHolder.z_image);
        ziAdapterViewHolder.z_checkbox.setChecked(listdata.get(i).isChecked());
        ziAdapterViewHolder.z_checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean checked = ziAdapterViewHolder.z_checkbox.isChecked();
                listdata.get(i).setChecked(checked);
                if (listener!=null){
                    listener.changeData(listdata);
                }
            }
        });
    }

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

    public void setData(List<GoodBean.DataBean.ListBean> list) {
        if (list!=null){
            listdata.clear();
            listdata.addAll(list);
            notifyDataSetChanged();
        }
    }

    public class ZiAdapterViewHolder extends RecyclerView.ViewHolder {
        ImageView z_image;
        TextView z_title,z_price,z_count;
        CheckBox z_checkbox;
        public ZiAdapterViewHolder(@NonNull View itemView) {
            super(itemView);
            z_checkbox = itemView.findViewById(R.id.z_checkbox);
            z_image = itemView.findViewById(R.id.z_image);
            z_title = itemView.findViewById(R.id.z_title);
            z_price = itemView.findViewById(R.id.z_price);
            z_count = itemView.findViewById(R.id.z_count);
        }
    }
    public void setOnCallBackListener(OnCallBackListener listenet){
        this.listener=listenet;
    }
    public interface OnCallBackListener{
        void changeData(List<GoodBean.DataBean.ListBean> listShop);
    }
}

6.子类的布局

<?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="match_parent"
        android:layout_height="100dp">
        <CheckBox
            android:id="@+id/z_checkbox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"/>
        <ImageView
            android:id="@+id/z_image"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_toRightOf="@+id/z_checkbox"/>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="3dp"
            android:layout_toRightOf="@id/z_image">
            <TextView
                android:id="@+id/z_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/z_price"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#f00"/>
                <LinearLayout
                    android:layout_marginLeft="50dp"
                    android:background="#e5e5e5"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:layout_toRightOf="@id/z_price">
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textSize="18sp"
                        android:text="+"/>
                    <TextView
                        android:id="@+id/z_count"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="10dp"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textSize="18sp"
                        android:text="-"/>
                </LinearLayout>
            </RelativeLayout>
        </RelativeLayout>
    </RelativeLayout>

</RelativeLayout>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值