购物车

Activty里面
public class Fragmentthree extends Fragment implements Fragment3_viewinten {

private RecyclerView fragment3_recyclerView;
private CheckBox fragment3_checkBox;
private Button fragment3_jieshua;
private TextView fragment3_zongjia;
private TextView fragment3_zongjianshu;
private boolean c;
private List<Gouwuche.DataBean> list;
private Fragment3_adapter adapter;


@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment3, container, false);
    fragment3_recyclerView = view.findViewById(R.id.fragment3_RecyclerView);
    fragment3_checkBox = view.findViewById(R.id.fragment3_CheckBox);
    fragment3_jieshua = view.findViewById(R.id.fragment3_jieshua);
    fragment3_zongjia = view.findViewById(R.id.fragment3_zongjia);
    fragment3_zongjianshu = view.findViewById(R.id.fragment3_zongjianshu);
    Fragment3_precenter fragment3_precenter = new Fragment3_precenter(this);
    fragment3_precenter.getprecenter();
    //点击全选
    fragment3_checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (fragment3_checkBox.isChecked()) {
                c = true;
                for (int i = 0; i < list.size(); i++) {

                    list.get(i).setCheck(c);
                }
                adapter.notifyDataSetChanged();
            } else {
                c = false;
                for (int i = 0; i < list.size(); i++) {
                    list.get(i).setCheck(c);
                }
            }
            adapter.notifyDataSetChanged();
        }
    });

    fragment3_checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            checkSeller(fragment3_checkBox.isChecked());
            //刷新商家适配器
            adapter.notifyDataSetChanged();
        }
    });

    return view;
}


@Override
public void getview(String s) {
    Log.i("SSS", "333" + s);
    Gson gson = new Gson();
    Gouwuche gouwuche = gson.fromJson(s, Gouwuche.class);
    list = gouwuche.getData();
    adapter = new Fragment3_adapter(getActivity(), list);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
    linearLayoutManager.setOrientation(OrientationHelper.VERTICAL);
    fragment3_recyclerView.setLayoutManager(linearLayoutManager);
    fragment3_recyclerView.setAdapter(adapter);

    /*
     *选中全部商家,全选 / 全不选按钮选中
     * 根据选中的商品数量和所有的商品数量比较判断
     */
    //*****1.回调商家适配器里的接口
    adapter.setListener(new Fragment3_adapter.ShopCallBackListener() {
        @Override
        public void callBack(List<Gouwuche.DataBean> list) {

            //在这里重新遍历已经改状态后的数据,
            // 这里不能break跳出,因为还需要计算后面点击商品的价格和数目,所以必须跑完整个循环
            double totalPrice = 0;
            //勾选商品的数量,不是该商品购买的数量
            int num = 0;
            //所有商品总数,和上面的数量做比对,如果两者相等,则说明全选
            int totalNum = 0;
            for (int a = 0; a < list.size(); a++) {
                //获取商家里的商品
                List<Gouwuche.DataBean.ListBean> listAll = list.get(a).getList();
                //循环商品集合
                for (int i = 0; i < listAll.size(); i++) {
                    //***3.得到所有商品的总数
                    totalNum = totalNum + listAll.get(i).getNum();
                    Log.i("totalNum", "数量" + totalNum);
                    //****4.如果有商品选中----取选中的状态
                    if (listAll.get(i).isCheck()) {
                        //选中的商品价格
                        totalPrice = totalPrice + (listAll.get(i).getPrice() * listAll.get(i).getNum());
                        //选中商品的数量
                        num = num + listAll.get(i).getNum();
                    }
                }
            }
            if (num == totalNum) {
                //是全部选中
                fragment3_checkBox.setChecked(true);
            } else {
                //不是全部选中
                fragment3_checkBox.setChecked(false);
            }
            fragment3_zongjia.setText("总价" + totalPrice);
            fragment3_zongjianshu.setText("总数量" + num);
        }
    });
}

/**
 * 全选/全不选复选框选中
 * 1.所有商家的复选框选中
 * 2.所有的商品复选框选中
 * 修改选中状态,获取价格和数量
 */
private void checkSeller(boolean bool) {
    double totalPrice = 0;
    int num = 0;
    for (int a = 0; a < list.size(); a++) {
        //****1.遍历商家,改变状态---设置商家状态为全选中
        Gouwuche.DataBean dataBean = list.get(a);
        dataBean.setCheck(bool);
        //得到所有的商品
        List<Gouwuche.DataBean.ListBean> listAll = list.get(a).getList();
        for (int i = 0; i < listAll.size(); i++) {
            //****2.遍历商品,改变状态---设置商家的商品全部选中
            listAll.get(i).setCheck(bool);
            //计算总价
            totalPrice = totalPrice + (listAll.get(i).getPrice() * listAll.get(i).getNum());
            //计算总数量
            num = num + listAll.get(i).getNum();
        }
    }

    if (bool) {
        fragment3_zongjia.setText("总价" + totalPrice);
        fragment3_zongjianshu.setText("总数量(" + num + ")");
    } else {
        fragment3_zongjia.setText("总价:0.00");
        fragment3_zongjianshu.setText("总数量(0)");
    }
}

商家adapter
public class Fragment3_adapter extends RecyclerView.Adapter<Fragment3_adapter.VVH> {

Context context;
private List<Gouwuche.DataBean> list;
LayoutInflater layoutInflater;

public Fragment3_adapter(Context context, List<Gouwuche.DataBean> list) {
    this.layoutInflater = LayoutInflater.from(context);
    this.context = context;
    this.list = list;
}
private ShopCallBackListener mShopCallBackListener;

public void setListener(ShopCallBackListener listener) {
    this.mShopCallBackListener = listener;
}

public interface ShopCallBackListener {
    void callBack(List<Gouwuche.DataBean> list);
}
//商家
@NonNull
@Override
public VVH onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = layoutInflater.inflate(R.layout.fragment3_adapter, viewGroup, false);
    VVH vvh = new VVH(view);
    return vvh;
}

@Override
public void onBindViewHolder(@NonNull final VVH vvh, final int i) {
    vvh.name.setText(list.get(i ).getSellerName());
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
    linearLayoutManager.setOrientation(OrientationHelper.VERTICAL);
    vvh.recyclerView.setLayoutManager(linearLayoutManager);
    final List<Gouwuche.DataBean.ListBean> list1 = this.list.get(i).getList();
    final Fragment3_adapter_rcerview  rcerview = new Fragment3_adapter_rcerview(context, list1);
    vvh.recyclerView.setAdapter(rcerview);
    vvh.checkbox.setChecked(list.get(i).isCheck());

    //回调商品的接口
    //商品全部选中,商家选中
    rcerview.setListener(new Fragment3_adapter_rcerview.getdata() {
        @Override
        public void callBack() {
            if (mShopCallBackListener!=null) {
                mShopCallBackListener.callBack(list);
            }
            //*****2.创建一个临时的标志位,用来记录现在点击的状态
            boolean isAllChecked = true;
            //遍历所有商品
            for (int s=0;s<list1.size();s++) {
                if (!list1.get(s).isCheck()) {
                    //只要有一个商品未选中,标志位设置成false,并且跳出循环
                    isAllChecked = false;
                    break;
                }
            }
            //刷新商家状态
            vvh.checkbox.setChecked(isAllChecked);
            //商品的选中状态
            list.get(i).setCheck(isAllChecked);
        }
    });
    //商家选中,商家下的商品全部选中

    //监听checkBox的点击事件
    //目的是改变旗下所有商品的选中状态
    vvh.checkbox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //首先改变自己的标志位
            list.get(i).setCheck(vvh.checkbox.isChecked());
            //调用产品adapter的方法,用来全选和反选
            rcerview.selectOrRemoveAll(vvh.checkbox.isChecked());
        }
    });
}

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

public void setList(List<Gouwuche.DataBean> list) {
    this.list = list;
    notifyDataSetChanged();
}
class VVH extends RecyclerView.ViewHolder {

    private final CheckBox checkbox;
    private final TextView name;
    private final RecyclerView recyclerView;

    public VVH(@NonNull View itemView) {
        super(itemView);
        checkbox = itemView.findViewById(R.id.checkbox);
        name = itemView.findViewById(R.id.name);
        recyclerView = itemView.findViewById(R.id.RecyclerView);

    }
}

商品adapter
public class Fragment3_adapter_rcerview extends RecyclerView.Adapter<Fragment3_adapter_rcerview.VVH> {

Context context;
List<Gouwuche.DataBean.ListBean> listx;
LayoutInflater layoutInflater;

public Fragment3_adapter_rcerview(Context context, List<Gouwuche.DataBean.ListBean> list) {
    this.layoutInflater = LayoutInflater.from(context);
    this.context = context;
    this.listx = list;
}

//创建接口回调
private getdata getdata;

public void setListener(getdata getdata1) {
    this.getdata = getdata1;
}
public interface getdata {
    void callBack();
}

//在我们子商品的adapter中,修改子商品的全选和反选
public void selectOrRemoveAll(boolean checked) {
    //商品循环
    for (int s = 0; s < listx.size(); s++) {
        listx.get(s).setCheck(checked);
    }
    notifyDataSetChanged();
}

@NonNull
@Override
public VVH onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = View.inflate(context, R.layout.fragment3_adapter_rcerview, null);
    VVH vvh = new VVH(view);
    return vvh;
}

@Override
public void onBindViewHolder(@NonNull final VVH vvh, final int i) {
    vvh.text.setText(listx.get(i).getTitle());
    vvh.qian.setText(listx.get(i).getPrice() + "");
    vvh.shuliang.setText(listx.get(i).getNum() + "");
    Glide.with(context).load(listx.get(i).getImages().split("\\|")[0].replace("https", "http")).into(vvh.img);
    //根据我记录的状态,改变勾选
    vvh.fragment3_adapter_rcerview_checkBox.setChecked(listx.get(i).isCheck());
    //商品的跟商家的有所不同,商品添加了选中状态改变的监听
    vvh.fragment3_adapter_rcerview_checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            //优先改变自己的状态
            listx.get(i).setCheck(isChecked);
            //回调,目的是告诉acrivity,有人选中状态改变
            if (getdata != null) {
                getdata.callBack();
            }
        }
    });
    //设置自定义View里的Edit
    vvh.view_zidingyi.setData(this, listx, i);
    //调取view里自定义的接口回调方法
    vvh.view_zidingyi.setOnCallBack(new com.example.zh.xiangmu.View.CallBackListener() {
                                        @Override
                                        public void callBack() {
                                            if (getdata != null) {
                                                getdata.callBack();
                                            }
                                        }
                                    }

    );


}

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

class VVH extends RecyclerView.ViewHolder {
    private final ImageView img;
    private final TextView text;
    private final TextView qian;
    private final com.example.zh.xiangmu.View view_zidingyi;
    private final EditText shuliang;
    private final CheckBox fragment3_adapter_rcerview_checkBox;

    public VVH(@NonNull View itemView) {
        super(itemView);
        fragment3_adapter_rcerview_checkBox = itemView.findViewById(R.id.Fragment3_adapter_rcerview_CheckBox);
        img = itemView.findViewById(R.id.img);
        text = itemView.findViewById(R.id.text);
        qian = itemView.findViewById(R.id.qian);
        view_zidingyi = itemView.findViewById(R.id.view_zidingyi);
        shuliang = itemView.findViewById(R.id.shuliang);

    }
}

自定义view
public class View extends RelativeLayout {

private final Button jia;
private final Button jian;
private final TextView shuliang;
private List<Gouwuche.DataBean.ListBean> mList = new ArrayList<>();

public View(Context context, AttributeSet attrs) {
    super(context, attrs);

    LayoutInflater.from(context).inflate(R.layout.view, this);
    jia = findViewById(R.id.jia);
    jian = findViewById(R.id.jian);
    shuliang = findViewById(R.id.shuliang);

//点击加号
jia.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(android.view.View v) {
String s = shuliang.getText().toString();
if (!s.equals("")) {
int i1 = Integer.parseInt(s);
i1++;
shuliang.setText(i1 + “”);
//把点击后的值放进集合
list.get(position).setNum(i1);
//调用自己定义的接口
listener.callBack();
//刷新商品适配器
mMyShopAdapter.notifyItemChanged(position);
}
}
});
jian.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(android.view.View v) {
String s = shuliang.getText().toString();

            if (!s.equals("")) {
                int i1 = Integer.parseInt(s);
                if (i1 >= 2) {
                    i1--;
                    shuliang.setText(i1 + "");
                    //把点击后的值放进集合
                    list.get(position).setNum(i1);
                    //调用自己定义的接口
                    listener.callBack();
                    //刷新商品适配器
                    mMyShopAdapter.notifyItemChanged(position);
                } 
            }
        }
    });
}

//传递的数据
private List<Gouwuche.DataBean.ListBean> list = new ArrayList<>();
private int position;
private Fragment3_adapter_rcerview mMyShopAdapter;
private int num;

//创建data方法
public void setData(Fragment3_adapter_rcerview mMyShopAdapter, List<Gouwuche.DataBean.ListBean> list, int i) {
this.list = list;
this.mMyShopAdapter = mMyShopAdapter;
position = i;
//取出集合里的值
num = list.get(i).getNum();
//给数量赋值
shuliang.setText(num + “”);
}

public void setJia(OnClickListener listener) {
    jia.setOnClickListener(listener);
}


public void setJian(OnClickListener listener) {
    jian.setOnClickListener(listener);
}


public void setShuliang(String listener) {
    shuliang.setText(listener);
}

;
//创建接口回调
private CallBackListener listener;

//创建方法
public void setOnCallBack(CallBackListener listener) {
    this.listener = listener;
}

//创建接口
public interface CallBackListener {
    void callBack();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值