安卓代码简单实现电商购物车

activity_main.xml:

    

        
    

    

    

        

            

            

            
        

        

        
    



主界面MainActivity:

public class MainActivity extends AppCompatActivity implements CartAdapter.RefreshPriceInterface, View.OnClickListener {
    private ListView listView;
    private CheckBox cb_check_all;
    private TextView tv_total_price;
    private TextView tv_delete;
    private TextView tv_go_to_pay;

    private CartAdapter adapter;

    private double totalPrice = 0.00;
    private int totalCount = 0;
    private List> goodsList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        initDate();
    }

    //控制价格展示
    private void priceControl(Map pitchOnMap) {
        totalCount = 0;
        totalPrice = 0.00;
        for (int i = 0; i < goodsList.size(); i++) {
            if (pitchOnMap.get(goodsList.get(i).get("id")) == 1) {
                totalCount = totalCount + Integer.valueOf(goodsList.get(i).get("count"));
                double goodsPrice = Integer.valueOf(goodsList.get(i).get("count")) * Double.valueOf(goodsList.get(i).get("price"));
                totalPrice = totalPrice + goodsPrice;
            }
        }
        tv_total_price.setText("¥ " + totalPrice);
        tv_go_to_pay.setText("付款(" + totalCount + ")");
    }

    @Override
    public void refreshPrice(Map pitchOnMap) {
        priceControl(pitchOnMap);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.all_chekbox:
                AllTheSelected();
                break;
            case R.id.tv_go_to_pay:
                if (totalCount <= 0) {
                    Toast.makeText(this, "请选择要付款的商品~", Toast.LENGTH_SHORT).show();
                    return;
                }
                Toast.makeText(this, "钱就是另一回事了~", Toast.LENGTH_SHORT).show();
                break;
            case R.id.tv_delete:
                if (totalCount <= 0) {
                    Toast.makeText(this, "请选择要删除的商品~", Toast.LENGTH_SHORT).show();
                    return;
                }
                checkDelete(adapter.getPitchOnMap());
                break;
        }
    }

    //删除操作
    private void checkDelete(Map map) {
        List> waitDeleteList = new ArrayList<>();
        Map waitDeleteMap = new HashMap<>();
        for (int i = 0; i < goodsList.size(); i++) {
            if (map.get(goodsList.get(i).get("id")) == 1) {
                waitDeleteList.add(goodsList.get(i));
                waitDeleteMap.put(goodsList.get(i).get("id"), map.get(goodsList.get(i).get("id")));
            }
        }
        goodsList.removeAll(waitDeleteList);
        map.remove(waitDeleteMap);
        priceControl(map);
        adapter.notifyDataSetChanged();
    }

    //全选或反选
    private void AllTheSelected() {
        Map map = adapter.getPitchOnMap();
        boolean isCheck = false;
        boolean isUnCheck = false;
        Iterator iter = map.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry entry = (Map.Entry) iter.next();
            if (Integer.valueOf(entry.getValue().toString()) == 1) isCheck = true;
            else isUnCheck = true;
        }
        if (isCheck == true && isUnCheck == false) {//已经全选,做反选
            for (int i = 0; i < goodsList.size(); i++) {
                map.put(goodsList.get(i).get("id"), 0);
            }
            cb_check_all.setChecked(false);
        } else if (isCheck == true && isUnCheck == true) {//部分选择,做全选
            for (int i = 0; i < goodsList.size(); i++) {
                map.put(goodsList.get(i).get("id"), 1);
            }
            cb_check_all.setChecked(true);
        } else if (isCheck == false && isUnCheck == true) {//一个没选,做全选
            for (int i = 0; i < goodsList.size(); i++) {
                map.put(goodsList.get(i).get("id"), 1);
            }
            cb_check_all.setChecked(true);
        }
        priceControl(map);
        adapter.setPitchOnMap(map);
        adapter.notifyDataSetChanged();
    }

    private void initView() {
        listView = (ListView) findViewById(R.id.listview);
        cb_check_all = (CheckBox) findViewById(R.id.all_chekbox);
        tv_total_price = (TextView) findViewById(R.id.tv_total_price);
        tv_delete = (TextView) findViewById(R.id.tv_delete);
        tv_go_to_pay = (TextView) findViewById(R.id.tv_go_to_pay);
        tv_go_to_pay.setOnClickListener(this);
        tv_delete.setOnClickListener(this);
        cb_check_all.setOnClickListener(this);

        adapter = new CartAdapter(this, goodsList);
        adapter.setRefreshPriceInterface(this);
        listView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }

    private void initDate() {
        goodsList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            HashMap map = new HashMap<>();
            map.put("id", (new Random().nextInt(10000) % (10000 - 2900 + 2900) + 2900) + "");
            map.put("name", "购物车里的第" + (i + 1) + "件商品");
            map.put("type", (i + 20) + "码");
            map.put("price", (new Random().nextInt(100) % (100 - 29 + 29) + 29) + "");
            map.put("count", (new Random().nextInt(10) % (10 - 1 + 1) + 1) + "");
            goodsList.add(map);
        }
        initView();
    }
}


 
  
cart.xml:

  

    

        

        

        

            

            

                

                

                

                    

                    

                    
                
            
        
    
 
  
   
  
 
  
 
  
CartAdapter:
class CartAdapter extends BaseAdapter {

    private Context context;
    private List> dataList;
    private ViewHolder vh;
    private Map pitchOnMap;
    private RefreshPriceInterface refreshPriceInterface;

    public CartAdapter(Context context, List> list) {
        this.context = context;
        this.dataList = list;

        pitchOnMap = new HashMap<>();
        for (int i = 0; i < dataList.size(); i++) {
            pitchOnMap.put(dataList.get(i).get("id"), 0);
        }
    }

    @Override
    public View getView(final int position, View view, ViewGroup viewGroup) {
        vh = new ViewHolder();
        if (view == null) {
            view = LayoutInflater.from(context).inflate(R.layout.item_shopcart_product, null);

            vh.checkBox = (CheckBox) view.findViewById(R.id.check_box);
            vh.icon = (ImageView) view.findViewById(R.id.iv_adapter_list_pic);
            vh.name = (TextView) view.findViewById(R.id.tv_goods_name);
            vh.price = (TextView) view.findViewById(R.id.tv_goods_price);
            vh.type = (TextView) view.findViewById(R.id.tv_type_size);
            vh.num = (TextView) view.findViewById(R.id.tv_num);
            vh.reduce = (TextView) view.findViewById(R.id.tv_reduce);
            vh.add = (TextView) view.findViewById(R.id.tv_add);

            view.setTag(vh);
        } else {
            vh = (ViewHolder) view.getTag();
        }

        if (dataList.size() > 0) {

            if (pitchOnMap.get(dataList.get(position).get("id")) == 0)
                vh.checkBox.setChecked(false);
            else vh.checkBox.setChecked(true);
            HashMap map = dataList.get(position);
            vh.name.setText(map.get("name"));
            vh.num.setText(map.get("count"));
            vh.type.setText(map.get("type"));
            vh.price.setText("¥ " + (Double.valueOf(map.get("price")) * Integer.valueOf(map.get("count"))));

            vh.checkBox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    final int index = position;
                    if (((CheckBox) view).isChecked())
                        pitchOnMap.put(dataList.get(index).get("id"), 1);
                    else pitchOnMap.put(dataList.get(index).get("id"), 0);
                    refreshPriceInterface.refreshPrice(pitchOnMap);
                }
            });
            vh.reduce.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    final int index = position;
                    dataList.get(index).put("count", (Integer.valueOf(dataList.get(index).get("count")) - 1) + "");
                    if (Integer.valueOf(dataList.get(index).get("count")) <= 0) {
                        //可提示是否删除该商品,确定就remove,否则就保留1
                        String deID = dataList.get(index).get("id");
                        dataList.remove(index);
                        pitchOnMap.remove(deID);
                    }
                    notifyDataSetChanged();
                    refreshPriceInterface.refreshPrice(pitchOnMap);
                }
            });
            vh.add.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    final int index = position;
                    dataList.get(index).put("count", (Integer.valueOf(dataList.get(index).get("count")) + 1) + "");
                    if (Integer.valueOf(dataList.get(index).get("count")) > 15) {
                        //15为库存可选择上限
                        Toast.makeText(context, "已达库存上限~", Toast.LENGTH_SHORT).show();
                        return;
                    }
                    notifyDataSetChanged();
                    refreshPriceInterface.refreshPrice(pitchOnMap);
                }
            });
        }

        return view;
    }

    public Map getPitchOnMap() {
        return pitchOnMap;
    }

    public void setPitchOnMap(Map pitchOnMap) {
        this.pitchOnMap = new HashMap<>();
        this.pitchOnMap.putAll(pitchOnMap);
    }

    public interface RefreshPriceInterface {
        void refreshPrice(Map pitchOnMap);
    }

    public void setRefreshPriceInterface(RefreshPriceInterface refreshPriceInterface) {
        this.refreshPriceInterface = refreshPriceInterface;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
img_check_no.png
img_check_yes.png

} @Override public int getCount() { if (dataList != null) { return dataList.size(); } else { return 0; } } class ViewHolder { CheckBox checkBox; ImageView icon; TextView name, price, num, type, reduce, add; }}
 
  
 
  
 
  
 
  
 
  
 
  
values文件夹下的colors.xml:


    #3F51B5
    #303F9F
    #FF4081
    #999999
    #D7D7D7
    #ffffff
    #fffff0
    #ffffe0
    #3060a4e3

    #ffff00
    #fffafa
    #fffaf0
    #fffacd
    #fff8dc
    #fff5ee
    #fff0f5
    #ffefd5
    #ffebcd
    #ffe4e1
    #ffe4c4
    #ffe4b5
    #ffdead
    #ffdab9
    #ffd700
    #ffc0cb
    #ffb6c1
    #fd7903
    #ffa07a
    #ff8c00
    #ff7f50
    #ff69b4
    #ff6347
    #ff4500
    #ff1493
    #ff00ff
    #ff00ff
    #ff0000
    #fdf5e6
    #fafad2
    #faf0e6
    #faebd7
    #fa8072
    #f8f8ff
    #f5fffa
    #f5f5f5
    #f5f5dc
    #f5deb3
    #f4a460
    #f0ffff
    #f0fff0
    #f0f8ff
    #f0e68c
    #f08080
    #eee8aa
    #ee82ee
    #e9967a
    #e6e6fa
    #e0ffff
    #deb887
    #dda0dd
    #dcdcdc
    #dc143c
    #db7093
    #daa520
    #da70d6
    #d8bfd8
    #d3d3d3
    #d3d3d3
    #d2b48c
    
    #d2691e
    
    #cd853f
    
    #cd5c5c
    
    #c71585
    
    #c0c0c0
    
    #bdb76b
    
    #bc8f8f
    
    #ba55d3
    
    #b8860b
    
    #b22222
    
    #b0e0e6
    
    #b0c4de
    
    #afeeee
    
    #adff2f
    
    #add8e6
    
    #a9a9a9
    
    #a9a9a9
    
    #a52a2a
    
    #a0522d
    
    #9932cc
    
    #98fb98
    
    #9400d3
    
    #9370db
    
    #90ee90
    
    #8fbc8f
    
    #8b4513
    
    #8b008b
    
    #8b0000
    
    #8a2be2
    
    #87cefa
    
    #87ceeb
    
    #808080
    
    #7c7b7b
    
    #808000
    
    #800080
    
    #800000
    
    #7fffd4
    
    #7fff00
    
    #7cfc00
    
    #7b68ee
    
    #778899
    
    #778899
    
    #708090
    
    #708090
    
    #6b8e23
    
    #6a5acd
    
    #696969
    
    #696969
    
    #66cdaa
    
    #6495ed
    
    #5f9ea0
    
    #556b2f
    
    #4b0082
    
    #48d1cc
    
    #483d8b
    
    #4682b4
    
    #4169e1
    
    #40e0d0
    
    #3cb371
    
    #32cd32
    
    #2f4f4f
    
    #2f4f4f
    
    #2e8b57
    
    #228b22
    
    #20b2aa
    
    #1e90ff
    
    #191970
    
    #00ffff
    
    #00ffff
    
    #00ff7f
    
    #00ff00
    
    #00fa9a
    
    #00ced1
    
    #00bfff
    
    #008b8b
    
    #008080
    
    #008000
    
    #006400
    
    #005dc1
    
    #0000cd
    
    #00008b
    
    #000080
    
    #3B3B3B
    
    
    
    #0174E1
    #cbcbcb
    #eaeaea
    #fcfcfc
    #1e1d1d
    #eaeaea
    
    #464646
    
    #3c3c3c
    
    #3c3c3c
    #da1609
    #0f90e3
    #66c058
    #DAE532
    #0074E1
    
    #949494
    
    #c4c4c4

    
    #f2f2f2
    #fff

    
    #484848
    #7d7d7d

    
    #D21A3E
    #B41131
    #515151
    #646464
    #a1a1a1
    #b5b5b5
    #c4c4c4
    #b18500
    #f7f7f7
    #00FF99

    
    #f6f6f6
    #929292
    
    #464646
    #464646
    
    #ed3b3b
    #b0b0b0
    #232323
    
    #333333
    #777777
    #b0000000
    #60000000
    #c0ffff00
    #00000000
    #ffffff
    #fafafa
    #eeeeee
    #0067db
    
    #CDCEC9
    #C3C3C3
    #2e000000
    #f2f2f2
    
    #333333
    #666666
    #999999
    
    #de6838



 
  



 
  

你可能感兴趣的:(安卓代码简单实现电商购物车)