Android一级购物车逻辑处理+功能实现

购物车:

一般情况下分为两种,一种是二级购物车(商家下包括商品),另一种是商城代表商家,购物车只有商品,我这里就是第二种,我只是简单的介绍了购物车页面的各种复选框和价格的逻辑处理,直接上代码,注释清晰。

准备工作:在你商品的bean对象里加一个boolean类型的变量即可;

Activity或fragment:


public class ShopCarFragment extends BaseFragment<ShopCatPresenter> implements ShopCarView {
    @BindView(R.id.rlv_shop)
    RecyclerView rlv_Shop;
    @BindView(R.id.shop_box_all)
    CheckBox shopBoxAll;
    @BindView(R.id.shop_text_allprice)
    TextView shopTextAllprice;
    @BindView(R.id.shop_text_go)
    TextView shopTextGo;
    private SharedPreferences sp_login;
    private String userId;
    private String sessionId;
    private ShopCarAdapter adapter;
    private List<QueryCartBean.ResultBean> result;


    @Override
    public int getFragmentLayout() {
        return R.layout.fragment_shopcar;
    }

    @Override
    public void initView() {
        sp_login = getActivity().getSharedPreferences("login", Context.MODE_PRIVATE);
        sessionId = sp_login.getString("sessionId", null);
        userId = sp_login.getString("userId", null);
        rlv_Shop.setLayoutManager(new LinearLayoutManager(getActivity()));
        rlv_Shop.addItemDecoration(new DividerItemDecoration(getActivity(), OrientationHelper.VERTICAL));
    }

    @Override
    protected ShopCatPresenter getPresenter() {
        //实例p
        presenter = new ShopCatPresenter(this);
        return presenter;
    }

    @Override
    public void initData() {
        if (!TextUtils.isEmpty(sessionId) && !TextUtils.isEmpty(userId)) {
            //关联p
            presenter.onRelated(userId, sessionId);
        }
        /**
         * 全选点击事件
         */
        shopBoxAll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkAll(shopBoxAll.isChecked());
                adapter.notifyDataSetChanged();
            }
        });
    }


    @Override
    public void getShopCarData(QueryCartBean queryCartBean) {

        if (queryCartBean != null) {
            result = queryCartBean.getResult();
            adapter = new ShopCarAdapter(getActivity(), result);
            rlv_Shop.setAdapter(adapter);
            adapter.notifyDataSetChanged();
            /**
             * 商品数量改变,条目复选框点击 --> 回调监听
             */
            adapter.setCallbackListener(new ShopCarAdapter.onCallbackListener() {
                @Override
                public void callback(List<QueryCartBean.ResultBean> list) {
                    double priceAll = 0;
                    int num = 0;
                    int totalNum = 0;
                    //遍历集合根据状态改变总价格总数量
                    for (int i = 0; i < list.size(); i++) {
                        boolean ischeck = list.get(i).isIscheck();
                        Log.i("xxx", "callback: "+ischeck);
                        //存入所有商品数量
                        totalNum+= list.get(i).getCount();
                        //选中状态
                        if (ischeck) {
                            //存入当前商品(价钱*数量)
                            priceAll += (list.get(i).getPrice() * list.get(i).getCount());
                            //存入当前商品数量
                            num += list.get(i).getCount();
                        }
                    }
                    if (num==totalNum){
                        shopBoxAll.setChecked(true);
                    }else{
                        shopBoxAll.setChecked(false);
                    }
                    shopTextAllprice.setText("" + priceAll);
                    shopTextGo.setText("去结算(" + num + ")");
                }
            });
        }

    }

    /**
     * 全选方法
     *
     * @param checked
     */
    private void checkAll(boolean checked) {

            double priceAll = 0.0;
            int num = 0;
            for (int i = 0; i < result.size(); i++) {
                //修改商品的复选框
                result.get(i).setIscheck(checked);
                priceAll = priceAll + (result.get(i).getPrice() * result.get(i).getCount());
                num = num + result.get(i).getCount();
            }
        if (checked) {
            shopTextAllprice.setText("合计:" + priceAll);
            shopTextGo.setText("去结算(" + num + ")");
        } else {
            shopTextAllprice.setText("合计:" + 0.0);
            shopTextGo.setText("去结算(" + 0 + ")");
        }
    }

}

 适配器:

public class ShopCarAdapter extends RecyclerView.Adapter<ShopCarAdapter.MyViewHolder> {
    private Context context;
    private List<QueryCartBean.ResultBean> list;

    public ShopCarAdapter(Context context, List<QueryCartBean.ResultBean> list) {
        this.context = context;
        this.list = list;

    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_shopcar, null, false);
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, final int i) {
        QueryCartBean.ResultBean resultBean = list.get(i);
        final int price = resultBean.getPrice();
        myViewHolder.title_item.setText(resultBean.getCommodityName());
        myViewHolder.price_item.setText("¥:" + price);
        myViewHolder.img_item.setImageURI(Uri.parse(list.get(i).getPic()));
        //根据我记录的状态,改变勾选
        myViewHolder.check_item.setChecked(list.get(i).isIscheck());

        //商品复选框点击
        myViewHolder.check_item.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                //修改集合内的状态
                list.get(i).setIscheck(isChecked);
                if (callbackListener != null) {
                    callbackListener.callback(list);
                }
            }
        });

        //加减器方法
        myViewHolder.group_item.setData(this, list, i);

        //商品数量改变
        myViewHolder.group_item.setNumChangeListener(new GroupLayout.onNumChangeListener() {
            @Override
            public void changeNum() {
                if (callbackListener != null) {
                    callbackListener.callback(list);
                }
            }
        });

    }

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


    public class MyViewHolder extends RecyclerView.ViewHolder {

        private final CheckBox check_item;
        private final SimpleDraweeView img_item;
        private final TextView title_item;
        private final TextView price_item;
        private GroupLayout group_item;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            check_item = itemView.findViewById(R.id.check_item);
            img_item = itemView.findViewById(R.id.img_item);
            title_item = itemView.findViewById(R.id.title_item);
            price_item = itemView.findViewById(R.id.price_item);
            group_item = itemView.findViewById(R.id.group_item);
        }
    }

    /**
     * 计算总价接口回调
     */
    public interface onCallbackListener {
        void callback(List<QueryCartBean.ResultBean> list);
    }

    public onCallbackListener callbackListener;

    public void setCallbackListener(onCallbackListener callbackListener) {
        this.callbackListener = callbackListener;
    }
}

 自定义组合控件(加减):

public class GroupLayout extends LinearLayout implements View.OnClickListener {
    private int number = 1;
    private EditText num_goods;
    private ShopCarAdapter shopCarAdapter;
    private List<QueryCartBean.ResultBean> list;
    private int i;

    public GroupLayout(Context context) {
        super(context);
    }

    public GroupLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.group_layout, this);
        //控件
        TextView minus_goods = findViewById(R.id.minus_goods);
        TextView add_goods = findViewById(R.id.add_goods);
        num_goods = findViewById(R.id.num_goods);
        num_goods.setText(number + "");

        /**
         * 设置点击事件监听
         */
        minus_goods.setOnClickListener(this);
        add_goods.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {

            case R.id.add_goods://加
                number++;
                num_goods.setText(number + "");
                list.get(i).setCount(number);
                numChangeListener.changeNum();
                shopCarAdapter.notifyItemChanged(i);
                break;
            case R.id.minus_goods://减
                if (number > 1) {
                    number--;

                } else {
                    Toast.makeText(getContext(), "不能再少了", Toast.LENGTH_SHORT).show();
                }
                num_goods.setText(number + "");
                list.get(i).setCount(number);
                numChangeListener.changeNum();
                shopCarAdapter.notifyItemChanged(i);
                break;
        }

    }


    public void setData(ShopCarAdapter shopCarAdapter, List<QueryCartBean.ResultBean> list, int i) {
        this.list = list;
        this.shopCarAdapter = shopCarAdapter;
        this.i = i;
        number = list.get(i).getCount();
        num_goods.setText(this.number + "");
    }

    public interface onNumChangeListener {
        void changeNum();
    }

    public onNumChangeListener numChangeListener;

    public void setNumChangeListener(onNumChangeListener numChangeListener) {
        this.numChangeListener = numChangeListener;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43917449/article/details/88777613