安卓仿购物车的Demo

效果图:


安卓仿购物车的Demo_第1张图片
N6QRQHNWFH1{MA0PM4)KB_T.png

activity的xml




    

    


    


    

    

    


        


        


        
    


activity

package com.example.shoppingcart.shopp;

import android.util.SparseArray;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;

import com.example.shoppingcart.BaseActivity;
import com.example.shoppingcart.R;
import com.example.shoppingcart.ShoppingCartBean;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by AYD on 2016/11/21.
 * 购物车页面
 */
public class ShoppingCartActivity extends BaseActivity implements View.OnClickListener
        , ShoppingCartAdapter.CheckInterface, ShoppingCartAdapter.ModifyCountInterface {

    public TextView tv_title, tv_settlement, tv_show_price;
    private TextView tv_all_check;
    private CheckBox ck_all;
    private ListView list_shopping_cart;
    private ShoppingCartAdapter shoppingCartAdapter;
    private TextView tv_edit;
    private boolean flag = false;
    private List shoppingCartBeanList = new ArrayList<>();
    private boolean mSelect;
    private double totalPrice = 0.00;// 购买的商品总价
    private int totalCount = 0;// 购买的商品总数量
    /**
     * 批量模式下,用来记录当前选中状态
     */
    private SparseArray mSelectState = new SparseArray();


    @Override
    protected int getLayout() {
        return R.layout.layout_shopping_cart_activity;
    }

    @Override
    protected void initView() {
        tv_title = bindView(R.id.tv_title);
        tv_title.setText("购物车");
        list_shopping_cart = bindView(R.id.list_shopping_cart);
//        list_shopping_cart.setOnItemClickListener(this);
        ck_all = bindView(R.id.ck_all);
        ck_all.setOnClickListener(this);
//        ck_all.setOnCheckedChangeListener(this);
        tv_show_price = bindView(R.id.tv_show_price);
        tv_settlement = bindView(R.id.tv_settlement);
        tv_settlement.setOnClickListener(this);
        tv_edit = bindView(R.id.tv_edit);
        tv_edit.setOnClickListener(this);
        shoppingCartAdapter = new ShoppingCartAdapter(this);
        shoppingCartAdapter.setCheckInterface(this);
        shoppingCartAdapter.setModifyCountInterface(this);
        list_shopping_cart.setAdapter(shoppingCartAdapter);
        shoppingCartAdapter.setShoppingCartBeanList(shoppingCartBeanList);
    }

    @Override
    protected void initData() {

        for (int i = 0; i < 6; i++) {
            ShoppingCartBean shoppingCartBean = new ShoppingCartBean();
            shoppingCartBean.setShoppingName("高端大气上档次的T桖");
            shoppingCartBean.setFabric("纯棉");
            shoppingCartBean.setDressSize(48);
            shoppingCartBean.setPantsSize(65);
            shoppingCartBean.setPrice(60);
            shoppingCartBean.setCount(2);
            shoppingCartBeanList.add(shoppingCartBean);
        }

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            //全选按钮
            case R.id.ck_all:
                if (shoppingCartBeanList.size() != 0) {
                    if (ck_all.isChecked()) {
                        for (int i = 0; i < shoppingCartBeanList.size(); i++) {
                            shoppingCartBeanList.get(i).setChoosed(true);
                        }
                        shoppingCartAdapter.notifyDataSetChanged();
                    } else {
                        for (int i = 0; i < shoppingCartBeanList.size(); i++) {
                            shoppingCartBeanList.get(i).setChoosed(false);
                        }
                        shoppingCartAdapter.notifyDataSetChanged();
                    }
                }
                statistics();
                break;
            case R.id.tv_edit:
                flag = !flag;
                if (flag) {
                    tv_edit.setText("完成");
                    shoppingCartAdapter.isShow(false);
                } else {
                    tv_edit.setText("编辑");
                    shoppingCartAdapter.isShow(true);
                }
                break;
        }
    }


//    /**
//     * 全选 反选
//     *
//     * @param buttonView
//     * @param isChecked
//     */
//    @Override
//    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//        if (shoppingCartBeanList.size() != 0) {
//            if (isChecked) {
//                for (int i = 0; i < shoppingCartBeanList.size(); i++) {
//                    shoppingCartBeanList.get(i).setChoosed(true);
//                }
//                shoppingCartAdapter.notifyDataSetChanged();
//            } else {
//                for (int i = 0; i < shoppingCartBeanList.size(); i++) {
//                    shoppingCartBeanList.get(i).setChoosed(false);
//                }
//                shoppingCartAdapter.notifyDataSetChanged();
//            }
//        }
//        statistics();
//    }


    /**
     * 单选
     *
     * @param position  组元素位置
     * @param isChecked 组元素选中与否
     */
    @Override
    public void checkGroup(int position, boolean isChecked) {

        shoppingCartBeanList.get(position).setChoosed(isChecked);

        if (isAllCheck())
            ck_all.setChecked(true);
        else
            ck_all.setChecked(false);

        shoppingCartAdapter.notifyDataSetChanged();
        statistics();
    }


    /**
     * 遍历list集合
     *
     * @return
     */
    private boolean isAllCheck() {

        for (ShoppingCartBean group : shoppingCartBeanList) {
            if (!group.isChoosed())
                return false;
        }
        return true;
    }

    /**
     * 统计操作
     * 1.先清空全局计数器
* 2.遍历所有子元素,只要是被选中状态的,就进行相关的计算操作 * 3.给底部的textView进行数据填充 */ public void statistics() { totalCount = 0; totalPrice = 0.00; for (int i = 0; i < shoppingCartBeanList.size(); i++) { ShoppingCartBean shoppingCartBean = shoppingCartBeanList.get(i); if (shoppingCartBean.isChoosed()) { totalCount++; totalPrice += shoppingCartBean.getPrice() * shoppingCartBean.getCount(); } } tv_show_price.setText("合计:" + totalPrice); tv_settlement.setText("结算(" + totalCount + ")"); } /** * 增加 * * @param position 组元素位置 * @param showCountView 用于展示变化后数量的View * @param isChecked 子元素选中与否 */ @Override public void doIncrease(int position, View showCountView, boolean isChecked) { ShoppingCartBean shoppingCartBean = shoppingCartBeanList.get(position); int currentCount = shoppingCartBean.getCount(); currentCount++; shoppingCartBean.setCount(currentCount); ((TextView) showCountView).setText(currentCount + ""); shoppingCartAdapter.notifyDataSetChanged(); statistics(); } /** * 删减 * * @param position 组元素位置 * @param showCountView 用于展示变化后数量的View * @param isChecked 子元素选中与否 */ @Override public void doDecrease(int position, View showCountView, boolean isChecked) { ShoppingCartBean shoppingCartBean = shoppingCartBeanList.get(position); int currentCount = shoppingCartBean.getCount(); if (currentCount == 1) { return; } currentCount--; shoppingCartBean.setCount(currentCount); ((TextView) showCountView).setText(currentCount + ""); shoppingCartAdapter.notifyDataSetChanged(); statistics(); } /** * 删除 * @param position */ @Override public void childDelete(int position) { shoppingCartBeanList.remove(position); shoppingCartAdapter.notifyDataSetChanged(); statistics(); } }

ShoppingCartAdapter

package com.example.shoppingcart.shopp;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;


import com.example.shoppingcart.R;
import com.example.shoppingcart.ShoppingCartBean;

import java.util.List;

/**
 * Created by AYD on 2016/11/21.
 * 

* 购物车Adapter */ public class ShoppingCartAdapter extends BaseAdapter { private boolean isShow = true;//是否显示编辑/完成 private List shoppingCartBeanList; private CheckInterface checkInterface; private ModifyCountInterface modifyCountInterface; private Context context; public ShoppingCartAdapter(ShoppingCartActivity context) { this.context = context; } public void setShoppingCartBeanList(List shoppingCartBeanList) { this.shoppingCartBeanList = shoppingCartBeanList; notifyDataSetChanged(); } /** * 单选接口 * * @param checkInterface */ public void setCheckInterface(CheckInterface checkInterface) { this.checkInterface = checkInterface; } /** * 改变商品数量接口 * * @param modifyCountInterface */ public void setModifyCountInterface(ModifyCountInterface modifyCountInterface) { this.modifyCountInterface = modifyCountInterface; } @Override public int getCount() { return shoppingCartBeanList == null ? 0 : shoppingCartBeanList.size(); } @Override public Object getItem(int position) { return shoppingCartBeanList.get(position); } @Override public long getItemId(int position) { return position; } /** * 是否显示可编辑 * * @param flag */ public void isShow(boolean flag) { isShow = flag; notifyDataSetChanged(); } @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.item_shopping_cart_layout, parent, false); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } final ShoppingCartBean shoppingCartBean = shoppingCartBeanList.get(position); holder.tv_commodity_name.setText(shoppingCartBean.getShoppingName()); holder.tv_fabric.setText("面料:" + shoppingCartBean.getFabric()); holder.tv_dress.setText("西服尺寸:" + shoppingCartBean.getDressSize()); holder.tv_pants.setText("西裤尺寸:" + shoppingCartBean.getPantsSize()); holder.tv_price.setText("¥:" + shoppingCartBean.getPrice()); holder.ck_chose.setChecked(shoppingCartBean.isChoosed()); holder.tv_show_num.setText(shoppingCartBean.getCount() + ""); holder.tv_num.setText("X" + shoppingCartBean.getCount()); //单选框按钮 holder.ck_chose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { shoppingCartBean.setChoosed(((CheckBox) v).isChecked()); checkInterface.checkGroup(position, ((CheckBox) v).isChecked());//向外暴露接口 } } ); //增加按钮 holder.iv_add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { modifyCountInterface.doIncrease(position, holder.tv_show_num, holder.ck_chose.isChecked());//暴露增加接口 } }); //删减按钮 holder.iv_sub.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { modifyCountInterface.doDecrease(position, holder.tv_show_num, holder.ck_chose.isChecked());//暴露删减接口 } }); //删除弹窗 holder.tv_delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog alert = new AlertDialog.Builder(context).create(); alert.setTitle("操作提示"); alert.setMessage("您确定要将这些商品从购物车中移除吗?"); alert.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { return; } }); alert.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { modifyCountInterface.childDelete(position);//删除 目前只是从item中移除 } }); alert.show(); } }); //判断是否在编辑状态下 if (isShow) { holder.tv_commodity_name.setVisibility(View.VISIBLE); holder.tv_fabric.setVisibility(View.VISIBLE); holder.rl_edit.setVisibility(View.GONE); holder.tv_delete.setVisibility(View.GONE); } else { holder.tv_commodity_name.setVisibility(View.GONE); holder.tv_fabric.setVisibility(View.GONE); holder.rl_edit.setVisibility(View.VISIBLE); holder.tv_delete.setVisibility(View.VISIBLE); } return convertView; } //初始化控件 class ViewHolder { ImageView iv_chose; ImageView iv_show_pic, iv_sub, iv_add; TextView tv_commodity_name, tv_fabric, tv_dress, tv_pants, tv_price, tv_num, tv_delete, tv_show_num; CheckBox ck_chose; RelativeLayout rl_edit; public ViewHolder(View itemView) { ck_chose = (CheckBox) itemView.findViewById(R.id.ck_chose); iv_show_pic = (ImageView) itemView.findViewById(R.id.iv_show_pic); iv_sub = (ImageView) itemView.findViewById(R.id.iv_sub); iv_add = (ImageView) itemView.findViewById(R.id.iv_add); tv_commodity_name = (TextView) itemView.findViewById(R.id.tv_commodity_name); tv_fabric = (TextView) itemView.findViewById(R.id.tv_fabric); tv_dress = (TextView) itemView.findViewById(R.id.tv_dress); tv_pants = (TextView) itemView.findViewById(R.id.tv_pants); tv_price = (TextView) itemView.findViewById(R.id.tv_price); tv_num = (TextView) itemView.findViewById(R.id.tv_num); tv_delete = (TextView) itemView.findViewById(R.id.tv_delete); tv_show_num = (TextView) itemView.findViewById(R.id.tv_show_num); rl_edit = (RelativeLayout) itemView.findViewById(R.id.rl_edit); } } /** * 复选框接口 */ public interface CheckInterface { /** * 组选框状态改变触发的事件 * * @param position 元素位置 * @param isChecked 元素选中与否 */ void checkGroup(int position, boolean isChecked); } /** * 改变数量的接口 */ public interface ModifyCountInterface { /** * 增加操作 * * @param position 组元素位置 * @param showCountView 用于展示变化后数量的View * @param isChecked 子元素选中与否 */ void doIncrease(int position, View showCountView, boolean isChecked); /** * 删减操作 * * @param position 组元素位置 * @param showCountView 用于展示变化后数量的View * @param isChecked 子元素选中与否 */ void doDecrease(int position, View showCountView, boolean isChecked); /** * 删除子item * * @param position */ void childDelete(int position); } }

BaseActivity:

package com.example.shoppingcart;

import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.TypedValue;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;


/**
 * Created by AYD on 2016/10/24.
 * 基类 Activity
 */
public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        StatusBarCompat.compat(this, R.color.blue_news);
//        initSystemBarTint();
        setContentView(getLayout());
//        ActivityControl.addAty(this);
        initView();
        initData();
    }

    protected abstract int getLayout();

    protected abstract void initView();

    protected abstract void initData();

    protected  T bindView(int id) {
        return (T) findViewById(id);
    }


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


    /**
     * 子类可以重写改变状态栏颜色
     */
    protected int setStatusBarColor() {
        return getColorPrimary();
    }

    /**
     * 子类可以重写决定是否使用透明状态栏
     */
    protected boolean translucentStatusBar() {
        return false;
    }

    protected void initSystemBarTint() {
        Window window = getWindow();
        if (translucentStatusBar()) {
            // 设置状态栏全透明
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(Color.TRANSPARENT);
            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            }
            return;
        }
        // 沉浸式状态栏
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            //5.0以上使用原生方法
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(setStatusBarColor());
        }
    }

    /**
     * 获取主题色
     */
    public int getColorPrimary() {
        TypedValue typedValue = new TypedValue();
        getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true);
        return typedValue.data;
    }
}

封装的 ShoppingCartBean

package com.example.shoppingcart;

/**
 * Created by AYD on 2016/11/22.
 * 

* 购物车 */ public class ShoppingCartBean { private int id; private String imageUrl; private String shoppingName; private String fabric; private int dressSize; private int pantsSize; private double price; private int num; public boolean isChoosed; public boolean isCheck = false; private int count; public ShoppingCartBean() {} public ShoppingCartBean(int id, String shoppingName, String fabric, int dressSize, int pantsSize, double price, int num, int count) { this.id = id; this.shoppingName = shoppingName; this.fabric = fabric; this.dressSize = dressSize; this.pantsSize = pantsSize; this.price = price; this.num = num; this.count = count; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public boolean isChoosed() { return isChoosed; } public void setChoosed(boolean choosed) { isChoosed = choosed; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getImageUrl() { return imageUrl; } public void setImageUrl(String imageUrl) { this.imageUrl = imageUrl; } public String getShoppingName() { return shoppingName; } public void setShoppingName(String shoppingName) { this.shoppingName = shoppingName; } public String getFabric() { return fabric; } public void setFabric(String fabric) { this.fabric = fabric; } public int getDressSize() { return dressSize; } public void setDressSize(int dressSize) { this.dressSize = dressSize; } public int getPantsSize() { return pantsSize; } public void setPantsSize(int pantsSize) { this.pantsSize = pantsSize; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } }

check_box_style:



<-ck_select和ck_normal是选中和未选中的两张图片->
    
    
    
    

item_shopping_cart_layout:




    

    

    

        

        

            

            

            

            
        


        

        

            

        


        

        

            


            
        
    

    


layout_title:




    

你可能感兴趣的:(安卓仿购物车的Demo)