首页 > 系统 > Android > 正文

Android Studio实现简单购物车功能

2019-10-21 21:47:31
字体:
来源:转载
供稿:网友

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下

MainActivity的布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  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"  android:orientation="vertical"  tools:context=".MainActivity">  <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: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: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:background="#a29e9e"      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>

条目的布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  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: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: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/ic_launcher"       />    <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:text="商品"        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:textSize="14sp"          android:textStyle="bold"          android:text="价格"/>        <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: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:gravity="center"            android:background="#ccc"            android:text="一"            android:textSize="12sp" />          <TextView            android:id="@+id/tv_num"            android:layout_width="25dp"            android:layout_height="25dp"            android:gravity="center"            android:singleLine="true"            android:text="1"            android:textSize="12sp" />          <TextView            android:id="@+id/tv_add"            android:layout_width="25dp"            android:layout_height="25dp"            android:gravity="center"            android:text="十"            android:background="#ccc"            android:textSize="12sp" />        </LinearLayout>      </RelativeLayout>    </RelativeLayout>  </LinearLayout></LinearLayout>

CartAdapter适配器

public class CaetAdapter extends BaseAdapter {  private Context context;  private List<HashMap<String, String>> list;  private HashMap<String, Integer> pitchOnMap;  public HashMap<String, Integer> getPitchOnMap() {    return pitchOnMap;  }  public void setPitchOnMap(HashMap<String, Integer> pitchOnMap) {    this.pitchOnMap = pitchOnMap;  }  public CaetAdapter(Context context, List<HashMap<String, String>> list) {    this.context = context;    this.list = list;    pitchOnMap = new HashMap<>();    for (int i = 0; i < list.size(); i++) {      pitchOnMap.put(list.get(i).get("id"), 0);    }  }  @Override  public int getCount() {    return list.size();  }  @Override  public Object getItem(int position) {    return list.get(position);  }  @Override  public long getItemId(int position) {    return position;  }  @Override  public View getView(final int position, View convertView, ViewGroup parent) {    convertView = View.inflate(context, R.layout.item_layout, null);    final CheckBox checkBox;    ImageView icon;    final TextView name, price, num, type, reduce, add;    checkBox = convertView.findViewById(R.id.check_box);    icon = convertView.findViewById(R.id.iv_adapter_list_pic);    name = convertView.findViewById(R.id.tv_goods_name);    price = convertView.findViewById(R.id.tv_goods_price);    type = convertView.findViewById(R.id.tv_type_size);    num = convertView.findViewById(R.id.tv_num);    reduce = convertView.findViewById(R.id.tv_reduce);    add = convertView.findViewById(R.id.tv_add);    name.setText(list.get(position).get("name"));    price.setText("¥ " + (Integer.valueOf(list.get(position).get("price"))) * (Integer.valueOf(list.get(position).get("count"))));    type.setText(list.get(position).get("type"));    num.setText(list.get(position).get("count"));    if(pitchOnMap.get(list.get(position).get("id"))== 0){      checkBox.setChecked(false);    }else{      checkBox.setChecked(true);    }    checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {      @Override      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {        if(checkBox.isChecked()){          pitchOnMap.put(list.get(position).get("id"),1);        }else{          pitchOnMap.put(list.get(position).get("id"), 0);        }        mrefreshPriceInterface.refreshPrice(pitchOnMap);      }    });    //商品数量减    reduce.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        if (Integer.valueOf(list.get(position).get("count")) <= 1) {          Toast.makeText(context, "数量不能再减啦,只能删除!", Toast.LENGTH_SHORT).show();        } else {          list.get(position).put("count", (Integer.valueOf(list.get(position).get("count")) - 1) + "");          notifyDataSetChanged();        }        mrefreshPriceInterface.refreshPrice(pitchOnMap);      }    });    //商品数量加    add.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        list.get(position).put("count", (Integer.valueOf(list.get(position).get("count")) + 1) + "");        notifyDataSetChanged();        mrefreshPriceInterface.refreshPrice(pitchOnMap);      }    });    return convertView;  }  /**   * 创建接口   */  public interface RefreshPriceInterface {    /**     * 把价格展示到总价上     * @param pitchOnMap     */    void refreshPrice(HashMap<String, Integer> pitchOnMap);  }  /**   * 定义一个接口对象   */  private RefreshPriceInterface mrefreshPriceInterface;  /**   * 向外部暴露一个方法   * 把价格展示到总价上   * @param refreshPriceInterface   */  public void setRefreshPriceInterface(RefreshPriceInterface refreshPriceInterface) {    mrefreshPriceInterface = refreshPriceInterface;  }}

MainActivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener,CaetAdapter.RefreshPriceInterface{  private LinearLayout top_bar;  private ListView listview;  private CheckBox all_chekbox;  private TextView price;  private TextView delete;  private TextView tv_go_to_pay;  private List<User> goodsList;  private UserDao userDao;  private List<HashMap<String,String>> listmap=new ArrayList<>();  private CaetAdapter adapter;   private double totalPrice = 0.00;  private int totalCount = 0;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    initView();  }  private void initView() {    top_bar = (LinearLayout) findViewById(R.id.top_bar);    listview = (ListView) findViewById(R.id.listview);    all_chekbox = (CheckBox) findViewById(R.id.all_chekbox);    price = (TextView) findViewById(R.id.tv_total_price);    delete = (TextView) findViewById(R.id.tv_delete);    tv_go_to_pay = (TextView) findViewById(R.id.tv_go_to_pay);    all_chekbox.setOnClickListener(this);    delete.setOnClickListener(this);    tv_go_to_pay.setOnClickListener(this);    initDate();    adapter = new CaetAdapter(MainActivity.this, listmap);    listview.setAdapter(adapter);    adapter.setRefreshPriceInterface(this);  }  @Override  public void onClick(View v) {    switch (v.getId()) {      case R.id.all_chekbox:        AllTheSelected();        break;      case R.id.tv_delete:        checkDelete(adapter.getPitchOnMap());        break;      case R.id.tv_go_to_pay:        if(totalCount<=0){          Toast.makeText(this,"请选择要付款的商品~",Toast.LENGTH_SHORT).show();        }else{          Toast.makeText(this,"付款成功",Toast.LENGTH_SHORT).show();        }        break;    }  }  /**   * 数据   */  private void initDate() {    //创建集合    goodsList = new ArrayList<>();    //数据库    userDao = Myapplication.getInstances().getDaoSession().getUserDao();    userDao.deleteAll();    //数据源    for (int i = 0; i < 10; i++) {      //向数据库存放数据      User user = new User((long) i,          "购物车里的第" + (i + 1) + "件商品",          (i + 20) + "码",          "10",          "10");      userDao.insert(user);    }    //从数据库中把数据放到集合中    goodsList=userDao.loadAll();    //把结合中的数据放到HashMap集合中    for(int i=0;i<goodsList.size();i++){      HashMap<String,String> map=new HashMap<>();      map.put("id",goodsList.get(i).getId()+"");      map.put("name",goodsList.get(i).getName());      map.put("type",(goodsList.get(i).getType()));      map.put("price",goodsList.get(i).getPrice()+"");      map.put("count",goodsList.get(i).getCount()+"");      listmap.add(map);    }  }  @Override  public void refreshPrice(HashMap<String, Integer> pitchOnMap) {    priceControl(pitchOnMap);  }  /**   * 控制价格展示总价   */  private void priceControl(Map<String, Integer> pitchOnMap){    totalCount = 0;    totalPrice = 0.00;    for(int i=0;i<listmap.size();i++){      if(pitchOnMap.get(listmap.get(i).get("id"))==1){        totalCount=totalCount+Integer.valueOf(listmap.get(i).get("count"));        double goodsPrice=Integer.valueOf(listmap.get(i).get("count"))*Double.valueOf(listmap.get(i).get("price"));        totalPrice=totalPrice+goodsPrice;      }    }    price.setText(" ¥ "+totalPrice);    tv_go_to_pay.setText("付款("+totalCount+")");  }  /**   * 删除 控制价格展示总价   * @param map   */  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<listmap.size();i++){      if(map.get(listmap.get(i).get("id"))==1){        waitDeleteList.add(listmap.get(i));        waitDeleteMap.put(listmap.get(i).get("id"),map.get(listmap.get(i).get("id")));      }  }    listmap.removeAll(waitDeleteList);    map.remove(waitDeleteMap);    priceControl(map);    adapter.notifyDataSetChanged();  }  /**   *全选或反选   */  private void AllTheSelected(){    HashMap<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<listmap.size();i++){        map.put(listmap.get(i).get("id"),0);      }      all_chekbox.setChecked(false);    }else if(isCheck==true && isUnCheck==true){//部分选择,做全选      for(int i=0;i<listmap.size();i++){        map.put(listmap.get(i).get("id"),1);      }      all_chekbox.setChecked(true);    }else if(isCheck==false && isUnCheck==true){//一个没选,做全选      for(int i=0;i<listmap.size();i++){        map.put(listmap.get(i).get("id"),1);      }      all_chekbox.setChecked(true);    }    priceControl(map);    adapter.setPitchOnMap(map);    adapter.notifyDataSetChanged();  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表