简单的实现购物车

一:适配器

package com.mjd.imitate_jd.adapter;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.mjd.imitate_jd.R;
import com.mjd.imitate_jd.app.MyApp;
import com.mjd.imitate_jd.bean.CartBean;
import com.mjd.imitate_jd.utils.SumLayout;

import java.util.List;
/**
*@date: 2018/8/16 0016
*@author: 老街旧人
*@Description:   bargainPrice和price改为double类型
*@version:
**/
public class CartExpandAdapter extends BaseExpandableListAdapter {


    private List<CartBean.DataBean> list;
    private Callback callback;
    private int goodsMoney,goodsNum;

    public void setCallback(Callback callback) {
        this.callback = callback;
    }

    public CartExpandAdapter(List<CartBean.DataBean> list,Callback callback) {
        this.list = list;
        this.callback=callback;
    }

    /**
     * 统计小计 获取选中的个数
     */
    public void getcountsMoneyAndNum(){
        goodsMoney=0;
        goodsNum=0;
        if (list==null){
            return;
        }else {
            for (CartBean.DataBean li:list) {
                List<CartBean.DataBean.ListBean> l = li.getList();
                for (CartBean.DataBean.ListBean l1:l) {
                    //判断只有复选框选中时才计算
                    if (l1.getSelected()==1){
                        goodsNum+=l1.getNum();
                        goodsMoney+=(l1.getNum()*l1.getBargainPrice());
                    }
                }
            }
        }
    }

    //将所有的单选框设为全选或全不选
    public void setIsSelect(boolean ischecked){
        for (CartBean.DataBean li:list) {
            List<CartBean.DataBean.ListBean> list1 = li.getList();
            for (CartBean.DataBean.ListBean l:list1) {
                if (ischecked){
                    l.setSelected(1);
                }else {
                    l.setSelected(0);
                }
            }
        }
        notifyDataSetChanged();
    }

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

    @Override
    public int getChildrenCount(int groupPosition) {
        return list.get(groupPosition).getList().size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return list.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return list.get(groupPosition).getList().get(childPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        GroupViewHolder groupViewHolder=null;
        if(convertView==null){
            convertView=LayoutInflater.from(MyApp.getContext()).inflate(R.layout.cart_group_item,parent,false);
            groupViewHolder=new GroupViewHolder();
            groupViewHolder.textView=convertView.findViewById(R.id.cart_group_title);
            convertView.setTag(groupViewHolder);
        }else{
            groupViewHolder= (GroupViewHolder) convertView.getTag();
        }
        groupViewHolder.textView.setText(list.get(groupPosition).getSellerName());
        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        ChildViewHolder childViewHolder=null;
        if (convertView==null){
            convertView=LayoutInflater.from(MyApp.getContext()).inflate(R.layout.cart_child_item,parent,false);
            childViewHolder=new ChildViewHolder();
            childViewHolder.checkBox=convertView.findViewById(R.id.cart_child_box);
            childViewHolder.imageView=convertView.findViewById(R.id.cart_child_img);
            childViewHolder.tvTitile=convertView.findViewById(R.id.cart_child_title);
            childViewHolder.tvPrice=convertView.findViewById(R.id.cart_child_price);
            childViewHolder.tvJian=convertView.findViewById(R.id.cart_jian);
            childViewHolder.tvJia=convertView.findViewById(R.id.cart_jia);
            childViewHolder.tvNum=convertView.findViewById(R.id.cart_sum);
            convertView.setTag(childViewHolder);
        }else {
            childViewHolder= (ChildViewHolder) convertView.getTag();
        }
        final List<CartBean.DataBean.ListBean> listBeans = this.list.get(groupPosition).getList();

        //默认显示复选框是否选中
        int selected = listBeans.get(childPosition).getSelected();
        if(selected==1){
            childViewHolder.checkBox.setChecked(true);
        }else{
            childViewHolder.checkBox.setChecked(false);
        }
        Glide.with(MyApp.getContext()).load(listBeans.get(childPosition).getImages().split("\\|")[0]).into(childViewHolder.imageView);
        childViewHolder.tvTitile.setText(listBeans.get(childPosition).getTitle());
        //设置默认的数量
        childViewHolder.tvNum.setText(listBeans.get(childPosition).getNum()+"");

        //因为是double类型所以要加“”,基本类中字段中有小数点都改成double类型
        childViewHolder.tvPrice.setText(listBeans.get(childPosition).getBargainPrice()+"");


        //避免点击字条目中的加减号选中或是取消字条目的复选框
        childViewHolder.checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int selected1 = listBeans.get(childPosition).getSelected();
                if (selected1==0){
                    listBeans.get(childPosition).setSelected(1);
                }else if (selected1==1){
                    listBeans.get(childPosition).setSelected(0);
                }
                //刷新适配器,使显示器上的值改变
                notifyDataSetChanged();
            }
        });

        //购物车减
        childViewHolder.tvJian.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num = listBeans.get(childPosition).getNum();
                if (num>0){
                    num--;
                    listBeans.get(childPosition).setNum(num);
                }
                //刷新适配器,使显示器上的值改变
                notifyDataSetChanged();
            }
        });
        //购物车加
        childViewHolder.tvJia.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num = listBeans.get(childPosition).getNum();
                num++;
                listBeans.get(childPosition).setNum(num);
                //刷新适配器,使显示器上的值改变
                notifyDataSetChanged();
            }
        });

        return convertView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    public class GroupViewHolder{
        TextView textView;
    }

    public class ChildViewHolder{
        CheckBox checkBox;
        ImageView imageView;
        TextView tvTitile;
        TextView tvPrice;
        TextView tvJian;
        TextView tvNum;
        TextView tvJia;

    }

    public interface Callback{
        void buyGoodsSumListener(int goodsMoney,int goodsNum);
    }

    @Override
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
        getcountsMoneyAndNum();
        callback.buyGoodsSumListener(goodsMoney,goodsNum);
    }
}

 

 

二:购物车页面

package com.mjd.imitate_jd.fragment;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.mjd.imitate_jd.R;
import com.mjd.imitate_jd.adapter.CartExpandAdapter;
import com.mjd.imitate_jd.app.MyApp;
import com.mjd.imitate_jd.base.BaseFragment;
import com.mjd.imitate_jd.bean.CartBean;
import com.mjd.imitate_jd.mvp.car.presenter.CarPresenter;
import com.mjd.imitate_jd.mvp.car.view.ICarView;
import com.mjd.imitate_jd.utils.UserManage;

/**
 * A simple {@link Fragment} subclass.
 */
public class CarFragment extends BaseFragment implements ICarView, View.OnClickListener {
    private ImageView cart_iv_back;
    private ExpandableListView cart_expand;
    private CheckBox cart_check;
    private TextView cart_tv_xuan,cart_tv_price;
    private Button cart_btn_xiaban;
    private CarPresenter carPresenter;
    private String uid;
    private String token="1";
    private CartExpandAdapter cartExpandAdapter;
    private boolean ischecked=true;

    public CarFragment() {
        // Required empty public constructor
    }

    @Override
    protected void initListener() {
        cart_check.setOnClickListener(this);
        cart_btn_xiaban.setOnClickListener(this);
        //设置父条目不可点击
        cart_expand.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
            @Override
            public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                return true;
            }
        });
    }

    @Override
    protected void initData() {
        carPresenter=new CarPresenter(this);
        uid = UserManage.getInstance().getUserInfo(MyApp.getContext()).getUid();
        carPresenter.getCart(uid,token);
    }

    @Override
    protected void initViews(View view) {
        cart_iv_back=view.findViewById(R.id.cart_iv_back);
        cart_expand=view.findViewById(R.id.cart_expand);
        cart_check=view.findViewById(R.id.cart_check);
        cart_tv_xuan=view.findViewById(R.id.cart_tv_xuan);
        cart_tv_price=view.findViewById(R.id.cart_tv_price);
        cart_btn_xiaban=view.findViewById(R.id.cart_btn_xiaban);
        //设置属性去掉默认向下的箭头
        cart_expand.setGroupIndicator(null);
    }

    @Override
    protected int privideLayoutId() {
        return R.layout.fragment_car;
    }

    @Override
    public void OnSuccess(CartBean cartBean) {
        Toast.makeText(MyApp.getContext(),""+cartBean.getMsg(),Toast.LENGTH_SHORT).show();
        cartExpandAdapter = new CartExpandAdapter(cartBean.getData(), new CartExpandAdapter.Callback() {
            @Override
            public void buyGoodsSumListener(int goodsMoney, int goodsNum) {
                cart_tv_xuan.setText("数量:"+goodsNum);
                cart_tv_price.setText("小计:"+goodsMoney);
            }
        });
        cart_expand.setAdapter(cartExpandAdapter);
        //设置子条目不点击展示
        int count = cart_expand.getCount();
        for (int i = 0; i < count; i++) {
            cart_expand.expandGroup(i);
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.cart_check:
                quanxuan();
                break;
            case R.id.cart_btn_xiaban:

                break;
        }
    }

    private void quanxuan() {
        if (ischecked){
            cartExpandAdapter.setIsSelect(ischecked);
            cart_check.setChecked(ischecked);
            ischecked=false;
        }else {
            cartExpandAdapter.setIsSelect(ischecked);
            cart_check.setChecked(ischecked);
            ischecked=true;

        }
    }
}

 

加减框布局:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke android:width="0.1dp" android:color="#000000"></stroke>
    <size android:width="25dp" android:height="15dp"></size>
</shape>

 

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignBottom="@id/cart_child_img"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/jian"
        android:id="@+id/cart_jian"
        android:background="@drawable/sumbgcolor"
        android:gravity="center"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/sum"
        android:id="@+id/cart_sum"
        android:background="@drawable/sumbgcolor"
        android:gravity="center"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/jia"
        android:id="@+id/cart_jia"
        android:background="@drawable/sumbgcolor"
        android:gravity="center"
        />
</LinearLayout>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值