二级列表购物车

1activity布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".view.activity.MainActivity">

    <ExpandableListView
        android:id="@+id/expandable"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ExpandableListView>
    <LinearLayout
        android:orientation="horizontal"
        android:id="@+id/linear_bottom"
        android:layout_width="match_parent"
        android:layout_alignParentBottom="true"
        android:background="#999999"
        android:layout_height="48dp">
        <CheckBox
            android:id="@+id/select_all"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            />
        <TextView
            android:id="@+id/price_all"
            android:text="¥"
            android:layout_gravity="center_vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</RelativeLayout>

2activity

package com.example.yuemo.view.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.TextView;

import com.example.yuemo.R;
import com.example.yuemo.model.GwcBean;
import com.example.yuemo.presenter.MainPresenter;
import com.example.yuemo.view.adapter.MyAdapter;
import com.example.yuemo.view.interfaces.IMainView;

import java.util.List;

public class MainActivity extends BaseActivity implements IMainView<GwcBean> {


    private ExpandableListView expandableListView;
    private CheckBox checkBox;
    private TextView priceAll;
    private MainPresenter mainPresenter;
    private MyAdapter myAdapter;

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

    @Override
    protected void initView() {
        expandableListView = findViewById(R.id.expandable);
        checkBox = findViewById(R.id.select_all);
        priceAll = findViewById(R.id.price_all);
    }

    @Override
    protected void initData() {
        mainPresenter = new MainPresenter();
        mainPresenter.loadDataNew();
        mainPresenter.setView(this);

    }

    @Override
    public void onSuccess(GwcBean gwcBean) {
        myAdapter = new MyAdapter(this);
        myAdapter.setData(gwcBean);
        myAdapter.setCheckBox(checkBox);
        myAdapter.setText(priceAll);
        expandableListView.setAdapter(myAdapter);
    }

    @Override
    public void onErr(String err) {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mainPresenter.loadDataNew();
    }
}

3.adapter然后在bean类中生成两个get和set方法

package com.example.yuemo.view.adapter;

import android.content.Context;
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.example.yuemo.R;
import com.example.yuemo.model.GwcBean;
import com.example.yuemo.view.activity.MainActivity;

import java.util.List;

public class MyAdapter extends BaseExpandableListAdapter {
    private Context mContext;
    private GwcBean list;
    private CheckBox mCheckBox;
    private TextView mTextView;
    private float toralPrice=0;


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

    public void setData(GwcBean gwcBean) {
        this.list=gwcBean;
    }

    public void setCheckBox(CheckBox checkBox) {
        this.mCheckBox=checkBox;
        mCheckBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CheckBox checkBox1=(CheckBox) v;
                sumprice(checkBox1.isChecked());
                selectAll(checkBox1.isChecked());
            }

        });
    }
    private void sumprice(boolean checked) {
        toralPrice=0;
        for (int i = 0; i < list.getData().size(); i++) {
            GwcBean.DataBean dataBean = list.getData().get(i);
            for (int j = 0; j < dataBean.getSpus().size(); j++) {
                int price = dataBean.getSpus().get(j).getPraise_num();
                if (checked){
                    toralPrice+=price;
                }else{
                    toralPrice=0;
                }
            }
        }
        mTextView.setText("总价:¥"+toralPrice  );
    }
    private void selectAll(boolean checked) {
        for (int i = 0; i < list.getData().size(); i++) {
            GwcBean.DataBean dataBean = list.getData().get(i);
            dataBean.setIscheck(checked);
            for (int j = 0; j <dataBean.getSpus().size() ; j++) {
                GwcBean.DataBean.SpusBean spusBean = dataBean.getSpus().get(j);
                spusBean.setCheck(checked);
            }
        }
        notifyDataSetChanged();
    }
    public void setText(TextView priceAll) {
        this.mTextView=priceAll;
    }

    @Override
    public int getGroupCount() {
        if (list==null){
            return 0;
        }
        return list.getData().size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        if (list==null){
            return 0;
        }
        return list.getData().get(groupPosition).getSpus().size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return null;
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return null;
    }

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

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

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

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        GroupViewHolder groupViewHolder;
        if (convertView==null){
            convertView=LayoutInflater.from(mContext).inflate(R.layout.item_group,null);
            groupViewHolder = new GroupViewHolder();
            groupViewHolder.checkBox=convertView.findViewById(R.id.checkbox_parent);
            groupViewHolder.name=convertView.findViewById(R.id.shopName);
            convertView.setTag(groupViewHolder);
        }else{
            groupViewHolder=(GroupViewHolder)convertView.getTag();
        }
        groupViewHolder.checkBox.setChecked(list.getData().get(groupPosition).isIscheck());
        groupViewHolder.name.setText(list.getData().get(groupPosition).getName());
        groupViewHolder.checkBox.setTag(groupPosition);
        groupViewHolder.checkBox.setOnClickListener(new View.OnClickListener() {
                @Override
            public void onClick(View view) {
                CheckBox checkBox=(CheckBox) view;
                boolean checked = checkBox.isChecked();
                int groupParseInt = Integer.parseInt(checkBox.getTag().toString());
                    for (int i = 0; i <list.getData().get(groupParseInt).getSpus().size(); i++) {
                        int praise_num1 = list.getData().get(groupParseInt).getSpus().get(i).getPraise_num();
                        if (checked){
                            toralPrice+=praise_num1;
                        }else{
                            toralPrice-=praise_num1;
                        }
                    }
                    mTextView.setText("总价:¥"+toralPrice);
                list.getData().get(groupParseInt).setIscheck(checked);
                selectGroup(groupParseInt,checked);
                boolean selectAllGroup=isSelectAllGroup();
                mCheckBox.setChecked(selectAllGroup);
                notifyDataSetChanged();
            }

        });
        return convertView;
    }

    private boolean isSelectAllGroup() {
        for (int i = 0; i <list.getData().size() ; i++) {
            GwcBean.DataBean dataBean =list.getData().get(i);
            boolean ischeck = dataBean.isIscheck();
            if (!ischeck){
                return false;
            }
        }
        return true;
    }

    private void selectGroup(int groupParseInt, boolean checked) {
        for (int i = 0; i <list.getData().get(groupParseInt).getSpus().size() ; i++) {
            GwcBean.DataBean.SpusBean spusBean=list.getData().get(groupParseInt).getSpus().get(i);
            spusBean.setCheck(checked);
        }
    }


    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        ChildViewHolder childViewHolder;
        if (convertView==null){
            convertView=LayoutInflater.from(mContext).inflate(R.layout.item_child,null);
            childViewHolder = new ChildViewHolder();
            childViewHolder.name=convertView.findViewById(R.id.goodsName);
            childViewHolder.price=convertView.findViewById(R.id.goodsPrice);
            childViewHolder.image=convertView.findViewById(R.id.image);
            childViewHolder.checkBox=convertView.findViewById(R.id.checkbox_child);
            convertView.setTag(childViewHolder);
        }else{
            childViewHolder=(ChildViewHolder)convertView.getTag();
        }
        childViewHolder.name.setText(list.getData().get(groupPosition).getSpus().get(childPosition).getName());
        childViewHolder.price.setText("¥:"+list.getData().get(groupPosition).getSpus().get(childPosition).getPraise_num());
        childViewHolder.checkBox.setChecked(list.getData().get(groupPosition).getSpus().get(childPosition).isCheck());
        Glide.with(mContext).load(list.getData().get(groupPosition).getSpus().get(childPosition).getPic_url()).into(childViewHolder.image);
        childViewHolder.checkBox.setTag(groupPosition+"#"+childPosition);
        childViewHolder.checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CheckBox checkBox = (CheckBox) v;
                String tag = (String) checkBox.getTag();
                int groupParseInt=Integer.parseInt(tag.split("#")[0]);
                int childParseInt=Integer.parseInt(tag.split("#")[1]);
                GwcBean.DataBean dataBean = list.getData().get(groupParseInt);
                GwcBean.DataBean.SpusBean spusBean=dataBean.getSpus().get(childParseInt);
                spusBean.setCheck(checkBox.isChecked());
                int praise_num = spusBean.getPraise_num();
                if (checkBox.isChecked()){
                    toralPrice+=praise_num;
                }else{
                    toralPrice-=praise_num;
                }
                mTextView.setText("总价:¥"+toralPrice);
                boolean selectGruop = isSelectGruop(groupParseInt);
                dataBean.setIscheck(selectGruop);
                boolean selectAllGroup = isSelectAllGroup();
                mCheckBox.setChecked(selectAllGroup);
                notifyDataSetChanged();
            }

        });
        return convertView;
    }
    private boolean isSelectGruop(int groupParseInt) {
        for (int i = 0; i < list.getData().get(groupParseInt).getSpus().size(); i++) {
            GwcBean.DataBean.SpusBean spusBean=list.getData().get(groupParseInt).getSpus().get(i);
            boolean check = spusBean.isCheck();
            if (!check){
                return false;
            }
        }
        return true;
    }

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





    static class GroupViewHolder{
        TextView name;
        CheckBox checkBox;
    }
    static class ChildViewHolder{
        TextView name,price;
        CheckBox checkBox;
        ImageView image;
    }


}

4.父类条目布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <CheckBox
        android:id="@+id/checkbox_parent"
        android:layout_width="wrap_content"
        android:focusable="false"
        android:clickable="true"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/shopName"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


</LinearLayout>

5子类条目布局

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

    <CheckBox
        android:id="@+id/checkbox_child"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="50dp"/>
    <ImageView
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@mipmap/ic_launcher"/>
    <LinearLayout
        android:layout_marginLeft="40dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:id="@+id/goodsName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="111" />

        <TextView
            android:id="@+id/goodsPrice"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="222" />
    </LinearLayout>




</LinearLayout>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值