android开发购物车

//购物车布局文件--------------------------------------------------------
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    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.MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="购物车"
        android:textSize="25sp" />

    <View
        android:layout_width="match_parent"
        android:layout_height="0.75dp"
        android:background="#999999" />

    <ExpandableListView
        android:id="@+id/expan_list_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:groupIndicator="@null"></ExpandableListView>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">

        <CheckBox
            android:id="@+id/xuan"
            style="@style/Widget.AppCompat.CompoundButton.RadioButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="全选" />

        <TextView
            android:id="@+id/sum"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_weight="1"
            android:text="合计:¥0"
            android:textSize="25sp" />

        <Button
            android:id="@+id/toJiSuan"

            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#F00"
            android:text="去结算" />
    </LinearLayout>
    </LinearLayout>
styles.xml文件-------------------------------------------------

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

购物车加减号的布局-----------------------------------------------------
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="100dp"
    android:layout_height="30dp"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/sub"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@drawable/add_sub_shape"
        android:gravity="center"
        android:text="-"
        android:textSize="25sp" />

    <EditText
        android:id="@+id/count"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@drawable/add_sub_shape"
        android:focusable="false"
        android:gravity="center"
        android:text="0" />

    <TextView
        android:id="@+id/add"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@drawable/add_sub_shape"

        android:gravity="center"
        android:text="+"
        android:textSize="25sp" />

</LinearLayout>

购物车商品的布局------------------------------------------------------
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"

    android:orientation="horizontal">

    <CheckBox
        style="@style/Widget.AppCompat.CompoundButton.RadioButton"
        android:id="@+id/child_cb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/child_icon"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@mipmap/ic_launcher" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/child_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="商品名称"
            android:textSize="20sp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/child_price"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="价格:0"
                android:textColor="@android:color/holo_red_light" />


            <com.example.administrator.myapplication.view.AddSubView
                android:id="@+id/add_sub_view"
                android:layout_width="100dp"
                android:layout_height="25dp"
                android:layout_marginLeft="40dp"></com.example.administrator.myapplication.view.AddSubView>
        </LinearLayout>
    </LinearLayout>


</LinearLayout>
购物车商品的布局--------------------------------------------------------<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <CheckBox
        android:id="@+id/parent_cb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/parent_title"
        android:text="商家"
        android:singleLine="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

AddSubView--------------------------------------------------------
public class AddSubView extends LinearLayout implements View.OnClickListener {

    private TextView sub;
    private TextView add;
    private EditText count;
    private AddClickListener addClickListener;
    private SubClickListener subClickListener;
    private static final String TAG = "AddSubView------------";
    public AddSubView(Context context) {
        this(context, null);
    }

    public AddSubView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public AddSubView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        View view = View.inflate(context, R.layout.add_sub_layout, this);
        //获取控件
        sub = view.findViewById(R.id.sub);
        add = view.findViewById(R.id.add);
        count = view.findViewById(R.id.count);
        sub.setOnClickListener(this);
        add.setOnClickListener(this);
    }

    //点击事件
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            //减少
            case R.id.sub:
                String c = count.getText().toString();
                int i = Integer.parseInt(c);
                if (i <= 0) {
                    return;
                }
                count.setText(--i + "");
                subClickListener.onSubClick(v,i);
                Log.d(TAG, "减-----" + i);

                break;
            //增加
            case R.id.add:
                String c1 = count.getText().toString();
                int i1 = Integer.parseInt(c1);

                count.setText(++i1 + "");
                addClickListener.onAddClick(v,i1);
                Log.d(TAG, "onClick() returned: " + "加===");
                break;
        }
    }


    public int getCount() {
        return Integer.parseInt(count.getText().toString().trim());
    }

    public void setCount(int s) {
        count.setText(s + "");
    }

    public interface AddClickListener {
        void onAddClick(View view, int count);
    }

    public interface SubClickListener {
        void onSubClick(View view, int count);
    }

    public void setOnAddClickListener(AddClickListener addClickListener) {
        this.addClickListener = addClickListener;
    }

    public void setOnSubClickListener(SubClickListener subClickListener) {
        this.subClickListener = subClickListener;
    }

}
SumUtils------------------------------------------------------------
/**
 * 工具类
 */

public class SumUtils {
    public static String sum(List<GoBean.DataBean> list) {
        double sum = 0;
        for (int i = 0; i < list.size(); i++) {
            List<GoBean.ChildBean> list1 = list.get(i).getList();
            for (int j = 0; j < list1.size(); j++) {
                GoBean.ChildBean childBean = list1.get(j);
                if (childBean.isChildIsSelected()) {
                    sum += childBean.getPrice()*childBean.getNum();
                }
            }
        }
        return Double.toString(sum);
    }
}
MainActivity---------------------------------------------------------
public class MainActivity extends AppCompatActivity implements IView, View.OnClickListener {
    private static final String TAG = "MainActivity";
    private ExpandableListView expan_list_view;
    private CheckBox xuan;
    private TextView sum;
    private Button toJiSuan;
    List<GoBean.DataBean> list;
    private MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IPresentermpl iPresentermpl = new IPresentermpl();
        iPresentermpl.showCartList(new ICartModelmpl(), this);

        initView();
    }

    //初始化控件
    private void initView() {
        expan_list_view = findViewById(R.id.expan_list_view);
        xuan = findViewById(R.id.xuan);
        sum = findViewById(R.id.sum);
        toJiSuan = findViewById(R.id.toJiSuan);
        xuan.setOnClickListener(this);
        toJiSuan.setOnClickListener(this);
    }

    //展示数据
    @Override
    public void showCartList(List<GoBean.DataBean> list) {
        this.list=list;
        Log.d(TAG, "showCartList:+++++++++++++++++++++++++++++++++++++++++++++++++ " + list.size());
        myAdapter = new MyAdapter(MainActivity.this, list,this);
        expan_list_view.setAdapter(myAdapter);
        //展开字条吗
        int groupCount = expan_list_view.getCount();

        for (int i = 0; i < groupCount; i++) {

            expan_list_view.expandGroup(i);

        }
    }

    //显示总和
    @Override
    public void showCount(String count) {
        sum.setText("总价是:" + count);
    }

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

            //全选,反宣
            case R.id.xuan:
                boolean checked = xuan.isChecked();
                //只需要改变集合里面的数据,就可以了,然后刷新
                for (int i = 0; i < list.size(); i++) {
                    GoBean.DataBean dataBean = list.get(i);
                    dataBean.setParentIsSelected(checked);
                    //获得子集合,遍历
                    List<GoBean.ChildBean> list3 = dataBean.getList();

                    for (int j = 0; j < list3.size(); j++) {
                        list3.get(j).setChildIsSelected(checked);
                    }

                }
                //刷新即可
                myAdapter.notifyDataSetChanged();
                //计算
                String count = SumUtils.sum(list);
                sum.setText("总价是:" + count);
                break;
        }
    }
}
ExpandableListView适配器-----------------------------------------
public class MyAdapter extends BaseExpandableListAdapter{
    private Context context;
    private List<GoBean.DataBean> list;
    private IView iView;
    public MyAdapter(Context context, List<GoBean.DataBean> list,IView iView) {
        this.context = context;
        this.list = list;
        this.iView=iView;
    }

    @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 false;
    }

    @Override
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        ParentViewHolder parentViewHolder;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.item_parent, null);
            CheckBox parent_cb = convertView.findViewById(R.id.parent_cb);
            TextView parent_title = convertView.findViewById(R.id.parent_title);
            parentViewHolder = new ParentViewHolder(parent_cb, parent_title);
            convertView.setTag(parentViewHolder);
        } else {
            parentViewHolder = (ParentViewHolder) convertView.getTag();
        }
        //赋值
        //Log.d(TAG, "getGroupView() returned: " + list.get(groupPosition).isParentIsSelected() + "---" + groupPosition);
        parentViewHolder.getParent_cb().setChecked(list.get(groupPosition).isParentIsSelected());
        parentViewHolder.getParent_title().setText(list.get(groupPosition).getSellerName());
        //checkbox的点击事件
        parentViewHolder.getParent_cb().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean selected = list.get(groupPosition).isParentIsSelected();
                selected = !selected;
                list.get(groupPosition).setParentIsSelected(selected);
                //点击父条目的复选框,子条目,相应的改变
//                将复选框的状态赋值给子复选框
                List<GoBean.ChildBean> list1 = MyAdapter.this.list.get(groupPosition).getList();
                for (int i = 0; i < list1.size(); i++) {
                    GoBean.ChildBean childBean = list1.get(i);
                    childBean.setChildIsSelected(selected);
                }
                //刷新

                notifyDataSetChanged();
                //计算
                String sum = SumUtils.sum(list);
                iView.showCount(sum);
            }
        });
        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        MyChildViewHolder myChildViewHolder;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.child_layout, null);
            CheckBox childCb = convertView.findViewById(R.id.child_cb);
            TextView childTitle = convertView.findViewById(R.id.child_title);
            ImageView childIcon = convertView.findViewById(R.id.child_icon);
            TextView childPrice = convertView.findViewById(R.id.child_price);
            AddSubView addSubView = convertView.findViewById(R.id.add_sub_view);
            myChildViewHolder = new MyChildViewHolder(childCb, childTitle, childPrice, addSubView, childIcon);
            convertView.setTag(myChildViewHolder);
        } else {
            myChildViewHolder = (MyChildViewHolder) convertView.getTag();
        }
        //赋值
        myChildViewHolder.getChildCb().setChecked(list.get(groupPosition).getList().get(childPosition).isChildIsSelected());
        myChildViewHolder.getChildTitle().setText(list.get(groupPosition).getList().get(childPosition).getTitle());
        myChildViewHolder.getChildPrice().setText(list.get(groupPosition).getList().get(childPosition).getPrice() + "");
        myChildViewHolder.getAddSubView().setCount(list.get(groupPosition).getList().get(childPosition).getNum());
        myChildViewHolder.getAddSubView().setOnAddClickListener(new AddSubView.AddClickListener() {
            @Override
            public void onAddClick(View view, int count) {
                list.get(groupPosition).getList().get(childPosition).setNum(count);
                //开始计算,如果选中了,就计算,没选中,就不计算
                boolean selected = list.get(groupPosition).getList().get(childPosition).isChildIsSelected();
                //Log.d(TAG, "onAddClick() returned: " + "计算开始");
                if (selected){
                    String sum = SumUtils.sum(list);
                    //Log.d(TAG, "onAddClick() returned: " + sum);
                    iView.showCount(sum);
                }
            }
        });
        //减法
        myChildViewHolder.getAddSubView().setOnSubClickListener(new AddSubView.SubClickListener() {
            @Override
            public void onSubClick(View view, int count) {
                list.get(groupPosition).getList().get(childPosition).setNum(count);
                boolean selected = list.get(groupPosition).getList().get(childPosition).isChildIsSelected();
                //Log.d(TAG, "onAddClick() returned: " + "计算开始");
                if (selected){
                    String sum = SumUtils.sum(list);
                    //Log.d(TAG, "onAddClick() returned: " + sum);
                    iView.showCount(sum);
                }
            }
        });
        String images = list.get(groupPosition).getList().get(childPosition).getImages();
        String icon_url = images.split("\\|")[0];
        Glide.with(context).load(icon_url).into(myChildViewHolder.getChildIcon());
        myChildViewHolder.getChildCb().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean selected = list.get(groupPosition).getList().get(childPosition).isChildIsSelected();
                selected = !selected;
                list.get(groupPosition).getList().get(childPosition).setChildIsSelected(selected);
                //当所有的字条目被选中,父条目也要被选中。如果有一个字条目没有选中,父条目就不能选中
                List<GoBean.ChildBean> list2 = MyAdapter.this.list.get(groupPosition).getList();
                boolean flag = true;
                for (int j = 0; j < list2.size(); j++) {
                    if (!list2.get(j).isChildIsSelected()) {
                        flag = false;
                    }
                }
                list.get(groupPosition).setParentIsSelected(flag);
                //刷新
                notifyDataSetChanged();
                //计算
                String sum = SumUtils.sum(list);
                iView.showCount(sum);
            }
        });

        return convertView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return false;
    }
    //父分组的ViewHolder
    class ParentViewHolder {
        private CheckBox parent_cb;
        private TextView parent_title;

        public ParentViewHolder(CheckBox parent_cb, TextView parent_title) {
            this.parent_cb = parent_cb;
            this.parent_title = parent_title;
        }

        public CheckBox getParent_cb() {
            return parent_cb;
        }

        public void setParent_cb(CheckBox parent_cb) {
            this.parent_cb = parent_cb;
        }

        public TextView getParent_title() {
            return parent_title;
        }

        public void setParent_title(TextView parent_title) {
            this.parent_title = parent_title;
        }
    }
    //创建字条目的ViewHolder
    class MyChildViewHolder {
        private CheckBox childCb;
        private TextView childTitle;
        private TextView childPrice;
        private AddSubView addSubView;
        private ImageView childIcon;

        public MyChildViewHolder(CheckBox childCb, TextView childTitle, TextView childPrice, AddSubView addSubView, ImageView childIcon) {
            this.childCb = childCb;
            this.childTitle = childTitle;
            this.childPrice = childPrice;
            this.addSubView = addSubView;
            this.childIcon = childIcon;
        }

        public CheckBox getChildCb() {
            return childCb;
        }

        public void setChildCb(CheckBox childCb) {
            this.childCb = childCb;
        }

        public TextView getChildTitle() {
            return childTitle;
        }

        public void setChildTitle(TextView childTitle) {
            this.childTitle = childTitle;
        }

        public TextView getChildPrice() {
            return childPrice;
        }

        public void setChildPrice(TextView childPrice) {
            this.childPrice = childPrice;
        }

        public AddSubView getAddSubView() {
            return addSubView;
        }

        public void setAddSubView(AddSubView addSubView) {
            this.addSubView = addSubView;
        }

        public ImageView getChildIcon() {
            return childIcon;
        }

        public void setChildIcon(ImageView childIcon) {
            this.childIcon = childIcon;
        }
    }

}
Presenter层---------------------------------------------------------
public class IPresentermpl implements IPresenter{
    private static final String TAG = "IPresentermpl";
    @Override
    public void showCartList(ICartModel iCartModel, final IView iView) {
        //?source=android&uid=71
        Map<String,String> map=new HashMap<>();
        map.put("uid","71");
        iCartModel.getCartList(Httpfig.url, map, new GetCartListListener() {
            @Override
            public void getCartSuccess(String json) {
                Log.d(TAG, "getCartSuccess: "+json);
                Gson gson=new Gson();
                GoBean goBean = gson.fromJson(json, GoBean.class);
                List<GoBean.DataBean> data = goBean.getData();
                iView.showCartList(data);

            }

            @Override
            public void getCartError(String error) {
                Log.d(TAG, "getCartError: 失败+++++++++++++++++++++++++++++++++++++");
            }
        });
    }
}
Model层-------------------------------------------------------------
public class ICartModelmpl implements ICartModel {
    private static final String TAG = "ICartModelmpl";
    @Override
    public void getCartList(String url, Map<String, String> map, final GetCartListListener getCartListListener) {
        OKHttpUtils okHttpUtils=new OKHttpUtils();
        okHttpUtils.okPost(url,map);
        okHttpUtils.setOnLoginListener(new OKHttpUtils.LoginListener() {
            @Override
            public void loginSuccess(String json) {
                Log.d(TAG, "loginSuccess: "+json);
                getCartListListener.getCartSuccess(json);
            }

            @Override
            public void loginError(String error) {
                Log.d(TAG, "loginSuccess:+++++++++++++++++++++++++++++失败 "+error);
                getCartListListener.getCartError(error);
            }
        });
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值