购物车

http://120.27.23.105/product/getCarts?source=android&uid=99

自定义加减器

public class AddSubLayout extends LinearLayout {

    private View view;
    private TextView jian;
    private TextView add;
    private TextView num;

    public AddSubLayout(Context context) {
        this(context,null);
    }

    public AddSubLayout(Context context,  AttributeSet attrs) {
        this(context, attrs,-1);
    }

    public AddSubLayout(Context context,AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context);
        initListener();
    }

    private void initView(Context context) {
        view = View.inflate(context, R.layout.layout_add_sub, this);
        jian = view.findViewById(R.id.jian);
        add = view.findViewById(R.id.add);
        num = view.findViewById(R.id.num);
        num.setText("1");
    }

    private void initListener() {
        add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                add();
            }
        });
        jian.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                jian();
            }
        });
    }

    private void add() {
        String string = num.getText().toString();
        int number = Integer.parseInt(string);
        number++;
        setCurentCount(number);
    }
    private void jian() {
        String string = num.getText().toString();
        int number = Integer.parseInt(string);
        number--;
        if(number<=1){
            Toast.makeText(getContext(),"不能再少了",Toast.LENGTH_SHORT).show();
            return;
        }
        setCurentCount(number);
    }

    private void setCurentCount(int number) {
        num.setText(number+"");
        if (onNumChangedListener!=null){
            onNumChangedListener.onNumChanged(this,number);
        }
    }
    private OnNumChangedListener onNumChangedListener;

    public void setOnNumChangedListener(OnNumChangedListener onNumChangedListener){
        this.onNumChangedListener=onNumChangedListener;
    }
    public interface OnNumChangedListener{
        void onNumChanged(View view,int num);
    }
}

public class ShopCarFragment extends Fragment implements ShopCarView {


    private ExpandableListView expandableListView;
    private CheckBox checkBox;
    private TextView sub;
    private ShopCarPresent shopCarPresent;
    private ExpandListAdapter listAdapter;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_shop_car, container, false);
        expandableListView = view.findViewById(R.id.expandableListView);
        checkBox = view.findViewById(R.id.checkBox);
        sub = view.findViewById(R.id.sub);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        shopCarPresent = new ShopCarPresent(this);
        shopCarPresent.getShop();
        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked){
                    setCheckAll(1);
                }else {
                    setCheckAll(0);
                }
            }
        });
    }

    //全选
    private void setCheckAll(int i) {
        int groupCount = listAdapter.getGroupCount();
        for (int j = 0; j < groupCount; j++) {
            ShopCarBean.DataBean group = (ShopCarBean.DataBean) listAdapter.getGroup(j);
            List<ShopCarBean.DataBean.ListBean> list = group.getList();
            for (int k = 0; k < list.size(); k++) {
                //list.get(i).setSelected(i);
                ShopCarBean.DataBean.ListBean listBean = list.get(k);
                listBean.setSelected(i);
            }
        }
        listAdapter.notifyDataSetChanged();
        getTotal();//调用计算总价的方法
    }

    public void getTotal(){
        double total=0;
        int groupCount = listAdapter.getGroupCount();
        for (int i = 0; i < groupCount; i++) {
            ShopCarBean.DataBean group = (ShopCarBean.DataBean) listAdapter.getGroup(i);
            List<ShopCarBean.DataBean.ListBean> list = group.getList();
            for (int j = 0; j < list.size(); j++) {
                ShopCarBean.DataBean.ListBean listBean = list.get(j);
                boolean checked = listBean.isChecked();
                if (checked){
                    double price = listBean.getPrice();
                    total+=price*listBean.getNum();
                }
            }
        }
        sub.setText("合计:"+total);
    }

    @Override
    public void onSuccess(List<ShopCarBean.DataBean> list) {
        listAdapter = new ExpandListAdapter(list,getContext());
        expandableListView.setAdapter(listAdapter);
        for (int i = 0; i < listAdapter.getGroupCount(); i++) {
            expandableListView.expandGroup(i);
        }
        initListener();
    }

    private void initListener() {
        //点击商品
        expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
            @Override
            public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                ShopCarBean.DataBean group = (ShopCarBean.DataBean) listAdapter.getGroup(groupPosition);
                group.setChecked(!group.isChecked());
                int c=0;
                if(group.isChecked()){
                    c=1;
                }
                List<ShopCarBean.DataBean.ListBean> list = group.getList();
                for (int i = 0; i < list.size(); i++) {
                    ShopCarBean.DataBean.ListBean listBean = list.get(i);
                    listBean.setSelected(c);
                }
                listAdapter.notifyDataSetChanged();
                getTotal();//调用计算总价的方法
                return true;
            }
        });
        //点击商品孩子
        expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                ShopCarBean.DataBean.ListBean child = (ShopCarBean.DataBean.ListBean) listAdapter.getChild(groupPosition, childPosition);
                boolean checked = child.isChecked();
                if(checked){
                    child.setSelected(0);
                }else {
                    child.setSelected(1);
                }
                listAdapter.notifyDataSetChanged();
                getTotal();//调用计算总价的方法
                return true;
            }
        });
        //点击商品孩子计算总价
        listAdapter.setOnNumChangedListener(new AddSubLayout.OnNumChangedListener() {
            @Override
            public void onNumChanged(View view, int num) {
                getTotal();//调用计算总价的方法
            }
        });
    }

    @Override
    public void onFailed(String msg) {

    }
}

适配器

public class ExpandListAdapter extends BaseExpandableListAdapter {
    private List<ShopCarBean.DataBean> list;
    private Context context;
    private AddSubLayout.OnNumChangedListener onNumChangedListener;
    public ExpandListAdapter(List<ShopCarBean.DataBean> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @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=View.inflate(context, R.layout.list_group_item,null);
            groupViewHolder=new GroupViewHolder();
            groupViewHolder.checkBox=convertView.findViewById(R.id.shopCheckBox);
            groupViewHolder.shopName=convertView.findViewById(R.id.shopName);
            convertView.setTag(groupViewHolder);
        }else {
            groupViewHolder = (GroupViewHolder) convertView.getTag();
        }
        groupViewHolder.shopName.setText(list.get(groupPosition).getSellerName());
        groupViewHolder.checkBox.setChecked(list.get(groupPosition).isChecked());
        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=View.inflate(context,R.layout.list_child_item,null);
            childViewHolder=new ChildViewHolder();
            childViewHolder.childCheckBox=convertView.findViewById(R.id.childCheckBox);
            childViewHolder.imageView=convertView.findViewById(R.id.imageView);
            childViewHolder.childName=convertView.findViewById(R.id.childName);
            childViewHolder.addSubLayout=convertView.findViewById(R.id.addSubLayout);
            childViewHolder.price=convertView.findViewById(R.id.price);
            convertView.setTag(childViewHolder);
        }else {
            childViewHolder = (ChildViewHolder) convertView.getTag();
        }
        ShopCarBean.DataBean.ListBean listBean = list.get(groupPosition).getList().get(childPosition);
        childViewHolder.price.setText(listBean.getPrice()+"");
        childViewHolder.childName.setText(listBean.getTitle());
        childViewHolder.childCheckBox.setChecked(listBean.isChecked());
        String images = listBean.getImages();
        String[] split = images.split("\\|");
        if(split.length>0){
            Picasso.with(context).load(split[0]).into(childViewHolder.imageView);
        }
        childViewHolder.addSubLayout.setOnNumChangedListener(new AddSubLayout.OnNumChangedListener() {
            @Override
            public void onNumChanged(View view, int num) {
                list.get(groupPosition).getList().get(childPosition).setNum(num);
                if (onNumChangedListener!=null){
                    onNumChangedListener.onNumChanged(view,num);
                }
            }
        });
        return convertView;
    }

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

    public void setOnNumChangedListener(AddSubLayout.OnNumChangedListener onNumChangedListener){
        this.onNumChangedListener=onNumChangedListener;
    }
    class GroupViewHolder{
        CheckBox checkBox;
        TextView shopName;
    }
    class ChildViewHolder{
        CheckBox childCheckBox;
        ImageView imageView;
        TextView childName,price;
        AddSubLayout addSubLayout;
    }
}
public interface ShopCarCallBack {
    void onSuccess(List<ShopCarBean.DataBean> list);
    void onFailed(String msg);
}

加减器的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/jian"
        android:text="--"
        android:padding="10dp"
        android:textSize="14sp"
        android:textColor="#f00"/>
    <TextView
        android:id="@+id/num"
        android:layout_width="60dp"
        android:gravity="center_horizontal"
        android:layout_height="wrap_content" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/add"
        android:text="+"
        android:padding="10dp"
        android:textSize="14sp"
        android:textColor="#f00"/>
</LinearLayout>

主页面的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".fragment.ShopCarFragment"
    android:orientation="vertical">

    <ExpandableListView
        android:id="@+id/expandableListView"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:layout_height="0dp"/>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <CheckBox
            android:id="@+id/checkBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#f00"
            android:text="全选"/>
        <TextView
            android:id="@+id/sub"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="合计:0.0"
            android:layout_marginLeft="10dp"
            android:textSize="25sp"/>
        <Space
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:textSize="25sp"
            android:text="去结算"
            android:textColor="#fff"
            android:background="#f00"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>

商品的布局(组)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <CheckBox
        android:id="@+id/shopCheckBox"
        android:focusable="false"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/shopName"
        android:textSize="25sp"
        android:textColor="#f00"
        android:gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="商家"/>
</LinearLayout>

商品子布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
        <CheckBox
            android:layout_marginTop="20dp"
            android:id="@+id/childCheckBox"
            android:focusable="false"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <ImageView
            android:id="@+id/imageView"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:src="@mipmap/ic_launcher"/>
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <TextView
                android:layout_gravity="center_horizontal"
                android:id="@+id/childName"
                android:layout_width="350dp"
                android:layout_height="wrap_content"
                android:text="name"/>
            <TextView
                android:layout_marginTop="15dp"
                android:id="@+id/price"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="1234"/>
        </LinearLayout>
	//引用加减器
        <com.bw.fengye.shopcar3.addsub.AddSubLayout
            android:id="@+id/addSubLayout"
            android:layout_marginTop="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

        </com.bw.fengye.shopcar3.addsub.AddSubLayout>
    
</LinearLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值