首页 > 系统 > Android > 正文

Android实现简单购物车功能

2020-02-21 17:23:26
字体:
来源:转载
供稿:网友

作为Android的初级开发人员,可以在一个简单的列表视图中显示图形信息,其实作为在项目开发方面有一定经验的Android开发人员,listview的列表项中可能有各种按钮,下面武林技术频道小编带大家学习Android实现简单购物车功能。

MainActivity布局:

 

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical" >  <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:checkMark="?android:attr/listChoiceIndicatorMultiple"        android:gravity="center"        android:minHeight="64dp"        android:paddingLeft="10dp"        android:textAppearance="?android:attr/textAppearanceLarge"        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="@color/purple"        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:background="@color/orange"      android:clickable="true"      android:gravity="center"      android:text="删除"      android:textColor="#FAFAFA" />    <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></LinearLayout>

 

import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.CheckBox;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Random;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();          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();  }}

CartAdapter布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:orientation="vertical" >  <View    android:layout_width="match_parent"    android:layout_height="1dp"    android:background="#CCCCCC" />  <LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:background="@color/page_backgroup"    android:orientation="horizontal" >    <CheckBox      android:id="@+id/check_box"      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:checkMark="?android:attr/listChoiceIndicatorMultiple"      android:gravity="center"      android:minHeight="64dp"      android:minWidth="32dp"      android:textAppearance="?android:attr/textAppearanceLarge"      android:visibility="visible" />    <ImageView      android:id="@+id/iv_adapter_list_pic"      android:layout_width="85dp"      android:layout_height="85dp"      android:layout_marginBottom="15dp"      android:layout_marginTop="13dp"      android:scaleType="centerCrop"      android:src="@mipmap/good_icon" />    <RelativeLayout      android:layout_width="wrap_content"      android:layout_height="match_parent"      android:layout_gravity="center_vertical"      android:layout_marginTop="10dp"      android:layout_marginLeft="13dp" >      <TextView        android:id="@+id/tv_goods_name"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginRight="10dp"        android:layout_marginTop="20dp"        android:ellipsize="end"        android:maxLines="2"        android:textColor="@color/grey_color1"        android:textSize="14sp" />      <RelativeLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_marginBottom="30dp"        android:orientation="horizontal" >        <TextView          android:id="@+id/tv_goods_price"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_centerVertical="true"          android:singleLine="true"          android:textColor="@color/orange_color"          android:textSize="14sp"          android:textStyle="bold" />        <TextView          android:id="@+id/tv_type_size"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_centerVertical="true"          android:layout_marginLeft="10dp"          android:layout_toRightOf="@+id/tv_goods_price"          android:singleLine="true"          android:textColor="@color/grey_color3"          android:textSize="10sp"/>        <LinearLayout          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_alignParentRight="true"          android:layout_centerVertical="true"          android:layout_marginRight="15dp"          android:orientation="horizontal" >          <TextView            android:id="@+id/tv_reduce"            android:layout_width="25dp"            android:layout_height="25dp"            android:background="@drawable/text_angle_gray"            android:gravity="center"            android:text="一"            android:textColor="@color/grey_color1"            android:textSize="12sp" />          <TextView            android:id="@+id/tv_num"            android:layout_width="25dp"            android:layout_height="25dp"            android:background="@drawable/text_angle"            android:gravity="center"            android:singleLine="true"            android:text="1"            android:textColor="@color/grey_color1"            android:textSize="12sp" />          <TextView            android:id="@+id/tv_add"            android:layout_width="25dp"            android:layout_height="25dp"            android:background="@drawable/text_angle_right"            android:gravity="center"            android:text="+"            android:textColor="@color/grey_color1"            android:textSize="12sp" />        </LinearLayout>      </RelativeLayout>    </RelativeLayout>  </LinearLayout></LinearLayout>

 

import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Created by lipeng * 2017/6/5. */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_layout,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;  }}以上就是武林技术频道小编为大家带来的Android实现简单购物车功能,希望这些资料能帮助到大家,想知道更多的资讯,请继续关注js.Vevb.com吧!
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表