扣丁学堂Android培训之Android Studio实现简单购物车功能及源码

2018-07-12 14:15:09 93浏览

今天扣丁学堂Android培训给大家分享了Android Studio实现简单购物车功能及源码,下面我们一起来看一下吧。


MainActivity的布局文件

  <LinearLayoutxmlns: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>

条目的布局文件

  <LinearLayoutxmlns: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适配器

  publicclassCaetAdapterextendsBaseAdapter{
  privateContextcontext;
  privateList<HashMap<String,String>>list;
  privateHashMap<String,Integer>pitchOnMap;
  publicHashMap<String,Integer>getPitchOnMap(){
  returnpitchOnMap;
  }
  publicvoidsetPitchOnMap(HashMap<String,Integer>pitchOnMap){
  this.pitchOnMap=pitchOnMap;
  }
  publicCaetAdapter(Contextcontext,List<HashMap<String,String>>list){
  this.context=context;
  this.list=list;
  pitchOnMap=newHashMap<>();
  for(inti=0;i<list.size();i++){
  pitchOnMap.put(list.get(i).get("id"),0);
  }
  }
  @Override
  publicintgetCount(){
  returnlist.size();
  }
  @Override
  publicObjectgetItem(intposition){
  returnlist.get(position);
  }
  @Override
  publiclonggetItemId(intposition){
  returnposition;
  }
  @Override
  publicViewgetView(finalintposition,ViewconvertView,ViewGroupparent){
  convertView=View.inflate(context,R.layout.item_layout,null);
  finalCheckBoxcheckBox;
  ImageViewicon;
  finalTextViewname,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(newCompoundButton.OnCheckedChangeListener(){
  @Override
  publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){
  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(newView.OnClickListener(){
  @Override
  publicvoidonClick(Viewv){
  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(newView.OnClickListener(){
  @Override
  publicvoidonClick(Viewv){
  list.get(position).put("count",(Integer.valueOf(list.get(position).get("count"))+1)+"");
  notifyDataSetChanged();
  mrefreshPriceInterface.refreshPrice(pitchOnMap);
  }
  });
  returnconvertView;
  }
  /**
  *创建接口
  */
  publicinterfaceRefreshPriceInterface{
  /**
  *把价格展示到总价上
  *@parampitchOnMap
  */
  voidrefreshPrice(HashMap<String,Integer>pitchOnMap);
  }
  /**
  *定义一个接口对象
  */
  privateRefreshPriceInterfacemrefreshPriceInterface;
  /**
  *向外部暴露一个方法
  *把价格展示到总价上
  *@paramrefreshPriceInterface
  */
  publicvoidsetRefreshPriceInterface(RefreshPriceInterfacerefreshPriceInterface){
  mrefreshPriceInterface=refreshPriceInterface;
  }
  }
  MainActivity
  publicclassMainActivityextendsAppCompatActivityimplementsView.OnClickListener,CaetAdapter.RefreshPriceInterface{
  privateLinearLayouttop_bar;
  privateListViewlistview;
  privateCheckBoxall_chekbox;
  privateTextViewprice;
  privateTextViewdelete;
  privateTextViewtv_go_to_pay;
  privateList<User>goodsList;
  privateUserDaouserDao;
  privateList<HashMap<String,String>>listmap=newArrayList<>();
  privateCaetAdapteradapter;
  privatedoubletotalPrice=0.00;
  privateinttotalCount=0;
  @Override
  protectedvoidonCreate(BundlesavedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  initView();
  }
  privatevoidinitView(){
  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=newCaetAdapter(MainActivity.this,listmap);
  listview.setAdapter(adapter);
  adapter.setRefreshPriceInterface(this);
  }
  @Override
  publicvoidonClick(Viewv){
  switch(v.getId()){
  caseR.id.all_chekbox:
  AllTheSelected();
  break;
  caseR.id.tv_delete:
  checkDelete(adapter.getPitchOnMap());
  break;
  caseR.id.tv_go_to_pay:
  if(totalCount<=0){
  Toast.makeText(this,"请选择要付款的商品~",Toast.LENGTH_SHORT).show();
  }else{
  Toast.makeText(this,"付款成功",Toast.LENGTH_SHORT).show();
  }
  break;
  }
  }
  /**
  *数据
  */
  privatevoidinitDate(){
  //创建集合
  goodsList=newArrayList<>();
  //数据库
  userDao=Myapplication.getInstances().getDaoSession().getUserDao();
  userDao.deleteAll();
  //数据源
  for(inti=0;i<10;i++){
  //向数据库存放数据
  Useruser=newUser((long)i,
  "购物车里的第"+(i+1)+"件商品",
  (i+20)+"码",
  "10",
  "10");
  userDao.insert(user);
  }
  //从数据库中把数据放到集合中
  goodsList=userDao.loadAll();
  //把结合中的数据放到HashMap集合中
  for(inti=0;i<goodsList.size();i++){
  HashMap<String,String>map=newHashMap<>();
  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
  publicvoidrefreshPrice(HashMap<String,Integer>pitchOnMap){
  priceControl(pitchOnMap);
  }
  /**
  *控制价格展示总价
  */
  privatevoidpriceControl(Map<String,Integer>pitchOnMap){
  totalCount=0;
  totalPrice=0.00;
  for(inti=0;i<listmap.size();i++){
  if(pitchOnMap.get(listmap.get(i).get("id"))==1){
  totalCount=totalCount+Integer.valueOf(listmap.get(i).get("count"));
  doublegoodsPrice=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+")");
  }
  /**
  *删除控制价格展示总价
  *@parammap
  */
  privatevoidcheckDelete(Map<String,Integer>map){
  List<HashMap<String,String>>waitDeleteList=newArrayList<>();
  Map<String,Integer>waitDeleteMap=newHashMap<>();
  for(inti=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();
  }
  /**
  *全选或反选
  */
  privatevoidAllTheSelected(){
  HashMap<String,Integer>map=adapter.getPitchOnMap();
  booleanisCheck=false;
  booleanisUnCheck=false;
  Iteratoriter=map.entrySet().iterator();
  while(iter.hasNext()){
  Map.Entryentry=(Map.Entry)iter.next();
  if(Integer.valueOf(entry.getValue().toString())==1){
  isCheck=true;
  }else{
  isUnCheck=true;
  }
  }
  if(isCheck==true&&isUnCheck==false){//已经全选,做反选
  for(inti=0;i<listmap.size();i++){
  map.put(listmap.get(i).get("id"),0);
  }
  all_chekbox.setChecked(false);
  }elseif(isCheck==true&&isUnCheck==true){//部分选择,做全选
  for(inti=0;i<listmap.size();i++){
  map.put(listmap.get(i).get("id"),1);
  }
  all_chekbox.setChecked(true);
  }elseif(isCheck==false&&isUnCheck==true){//一个没选,做全选
  for(inti=0;i<listmap.size();i++){
  map.put(listmap.get(i).get("id"),1);
  }
  all_chekbox.setChecked(true);
  }
  priceControl(map);
  adapter.setPitchOnMap(map);
  adapter.notifyDataSetChanged();
  }
  }

以上就是扣丁学堂Android培训之Android Studio实现简单购物车功能及源码的详细介绍,希望本文的内容对学习Android开发费有深入的了解,如果你想学习更多的Android知识,对Android有全面的了解,请关注扣丁学堂微信公众号,或登录扣丁学堂官网了解更多,还有大量Android视频教程等着你来观看。

扣丁学堂微信公众号



【关注微信公众号获取更多学习资料】



查看更多关于“Android开发技术的相关资讯>>

标签:
扣丁微信
扣丁小程序
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号天丰利商场4层
京ICP备12003911号-6   Copyright © 2013 - 2018
返回顶部 返回顶部