Android 实现购物车加减器的实现

来源:互联网 发布:手机淘宝直通车在哪里 编辑:程序博客网 时间:2024/06/05 11:20
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<HashMap<String,String>> goodsList;        @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_main);            initDate();        }        //控制价格展示        private void priceControl(Map<String, Integer> 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<String, Integer> 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();                        Intent in=new Intent(this,TwoActivity.class);                        startActivity(in);                        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<String,Integer> map){            List<HashMap<String,String>> waitDeleteList=new ArrayList<>();            Map<String,Integer> 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<String,Integer> 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<String,String> 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();        }

}

-------------------------------------------------------------------

main.xml

<LinearLayout    android:id="@+id/top_bar"    android:layout_width="match_parent"    android:layout_height="48dp"    android:background="#E24146"    android:orientation="vertical" >    <TextView        android:id="@+id/title"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center"        android:minHeight="48dp"        android:text="购物车"        android:textColor="#ffffff"        android:textSize="17sp" /></LinearLayout><ListView    android:id="@+id/listview"    android:layout_width="match_parent"    android:layout_height="0dp"    android:layout_weight="1"    android:childIndicator="@null"    android:groupIndicator="@null" ></ListView><LinearLayout    android:layout_width="match_parent"    android:layout_height="50dp"    android:orientation="horizontal" >    <LinearLayout        android:layout_width="0dp"        android:layout_height="match_parent"        android:layout_weight="2.5"        android:gravity="center_vertical"        android:orientation="horizontal" >        <CheckBox            android:id="@+id/all_chekbox"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_vertical"            android:layout_marginLeft="10dp"            android:layout_marginRight="4dp"            android:button="@drawable/check_box_bg"            android:gravity="center"            android:minHeight="64dp"            android:paddingLeft="10dp"            android:visibility="visible" />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="5dp"            android:text="合计:"            android:textSize="16sp"            android:textStyle="bold" />        <TextView            android:id="@+id/tv_total_price"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="0.00"            android:textColor="#E21918"            android:textSize="16sp"            android:textStyle="bold" />    </LinearLayout>    <TextView        android:id="@+id/tv_delete"        android:layout_width="0dp"        android:layout_height="match_parent"        android:layout_weight="1"        android:clickable="true"        android:gravity="center"        android:text="删除"        android:textColor="#E21918" />    <TextView        android:id="@+id/tv_go_to_pay"        android:layout_width="0dp"        android:layout_height="match_parent"        android:layout_weight="1"        android:background="#E24146"        android:clickable="true"        android:gravity="center"        android:text="付款(0)"        android:textColor="#FAFAFA" /></LinearLayout>-----------------------------------------------------------------
public class CartAdapter extends BaseAdapter{     private Context context;         private List<HashMap<String,String>> dataList;         private ViewHolder vh;         private Map<String,Integer> pitchOnMap;         private RefreshPriceInterface refreshPriceInterface;         public CartAdapter(Context context,List<HashMap<String,String>> 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<String,String> 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<String,Integer> getPitchOnMap(){             return pitchOnMap;         }         public void setPitchOnMap(Map<String,Integer> pitchOnMap){             this.pitchOnMap=new HashMap<>();             this.pitchOnMap.putAll(pitchOnMap);         }         public interface RefreshPriceInterface{             void refreshPrice(Map<String, Integer> 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;         }         @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;         }}
-------------------------------------------------------------------