欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现的仿淘宝购物车demo示例

程序员文章站 2024-03-05 13:12:30
本文实例讲述了android实现的仿淘宝购物车。分享给大家供大家参考,具体如下: 夏的热情渐渐退去,秋如期而至,丰收的季节,小编继续着实习之路,走着走着,就走到了购物车,...

本文实例讲述了android实现的仿淘宝购物车。分享给大家供大家参考,具体如下:

夏的热情渐渐退去,秋如期而至,丰收的季节,小编继续着实习之路,走着走着,就走到了购物车,逛过淘宝或者是京东的小伙伴都知道购物车里面的宝贝可不止一件,对于爱购物的姑娘来说,购物车里面的商品恐怕是爆满,添加不进去了,以前逛淘宝的时候,小编没有想过要怎么样实现购物车,就知道在哪儿一个劲儿的逛,但是现在不一样了,小编做为一个开发者,想的就是该如何实现,捣鼓了两天的时间,用listview来实现,已经有模有样了,现在小编就来简单的总结一下实现购物车的心路历程,帮助有需要的小伙伴,欢迎小伙伴们留言交流。

首先,小编简单的介绍一下listview,listview 控件可使用四种不同视图显示项目。通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。 可使用 listview 控件将称作 listitem 对象的列表条目组织成下列四种不同的视图之一:1.大(标准)图标2.小图标3.列表4.报表 view 属性决定在列表中控件使用何种视图显示项目。还可用 labelwrap 属性控制列表中与项目关联的标签是否可换行显示。另外,还可管理列表中项目的排序方法和选定项目的外观。今天小编主要和小伙伴们分享一下,如何使用listview实现购物的功能。做过android的小伙伴都知道一个xml对应一个java类,但是购物车有点不一样,因为她里面的商品有可能不只一件,所以我们需要有两个xml,两个java类,相对应的还需要一个适配器adapter,一个model,下面小编来详细的介绍一下实现购物车的过程。

第一步,写model层,类似我们之前写过的实体层,具体代码如下所示:

/***
 * 说明:购物车的相关信息
 * 作者:丁国华
 * 时间:2015年8月10日 09:41:18
 */
package jczb.shoping.model;
import java.io.serializable;
import java.util.arraylist;
import java.util.list;
import android.r.string;
public class shoppingcart implements serializable {
    private string proimg;
    private string proname;
    private string shopprice;
    private string markprice;
    private string procount;
    public string getproimg() {
      return proimg;
    }
    public void setproimg(string proimg) {
      this.proimg = proimg;
    }
    public string getproname() {
      return proname;
    }
    public void setproname(string proname) {
      proname = proname;
    }
    public string getshopprice() {
      return shopprice;
    }
    public void setshopprice(string shopprice) {
      this.shopprice = shopprice;
    }
    public string getmarkprice() {
      return markprice;
    }
    public void setmarkprice(string markprice) {
      this.markprice = markprice;
    }
    public string getprocount() {
      return procount;
    }
    public void setprocount(string procount) {
      this.procount = procount;
    }
}

第二步,我们编写xml里面的文件,需要编写两个xml文件,首先我们来编写activity_shoppingcart.xml的文件,代码如下所示:

<?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:layout_width="match_parent"
     android:layout_height="50dp"
     android:background="#438fcb"
     android:orientation="horizontal">
     <!-- 尖括号的布局 -->
     <imageview
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:padding="8dp"
        android:src="@drawable/tb_icon_actionbar_back" />
     <!-- 购物车的布局 -->
     <textview
       android:layout_width="0dp"
       android:layout_height="match_parent"
       android:layout_weight="5.49"
       android:gravity="center"
       android:text="购物车"
       android:textcolor="#ffffff"
       android:textsize="20sp"/>
     <!-- 编辑的布局 -->
     <textview
       android:layout_width="0dp"
       android:layout_height="match_parent"
       android:layout_weight="3.18"
       android:gravity="center"
       android:text="编辑"
       android:textcolor="#ffffff"
       android:textsize="20sp" />
  </linearlayout>
  <!-- listview,购物车里面的东西有可能比较多,需要用listview来进行显示 -->
  <linearlayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical"
        android:layout_margintop="0dp">
    <listview
       android:id="@+id/cart_shopping_listview"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:divider="#808080"
       android:dividerheight="0.5dp">
    </listview>
  </linearlayout>
  <linearlayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_alignparentbottom="true"
    android:orientation="horizontal">
     <!-- 全选的布局 -->
     <checkbox
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginleft="10dp"
       android:text="全选"/>
     <!-- 合计的布局 -->
     <textview
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:gravity="right"
       android:paddingright="10dp"
       android:textcolor="#f63a19"
       android:text="合计:¥88"/>
     <!-- 去结算的布局 -->
    <textview
       android:id="@+id/jiesuan_button"
       android:layout_width="80dp"
       android:layout_height="wrap_content"
       android:layout_marginright="10dp"
       android:background="@drawable/android_login_color"
       android:gravity="center"
       android:padding="10dp"
       android:text="结算"/>
  </linearlayout>
</linearlayout >

我们来看一下xml布局的效果,如下图所示:

Android实现的仿淘宝购物车demo示例

接着我们来布局第二个xml,activity_shoppingcart_item.xml,代码如下所示:

<?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:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
     <!-- 小对勾的布局 -->
    <checkbox
      android:id="@+id/pro_checkbox"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:focusable="false"
      android:focusableintouchmode="false" />
     <!-- 图片布局 -->
     <imageview
       android:id="@+id/pro_image"
       android:layout_width="80dp"
       android:layout_height="80dp"
       android:layout_margin="5dp"
       android:scaletype="centercrop"
       android:src="@drawable/detail_show_1"/>
     <!-- 商品名称和价格的布局 -->
     <linearlayout
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical">
       <!-- 商品名称的布局 -->
       <textview
         android:id="@+id/pro_name"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_margintop="10dp"
         android:text="连衣裙女夏季"
         />
       <!-- 价格的布局 -->
       <linearlayout
         android:layout_width="match_parent"
         android:layout_height="33dp"
         android:orientation="horizontal" >
    <textview
       android:id="@+id/pro_shopprice"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="bottom"
           android:layout_margintop="10dp"
           android:text="¥88"
           android:textsize="16sp"/>
      <!-- <textview
       android:id="@+id/pro_markprice"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="bottom"
           android:layout_margintop="10dp"
           android:text="¥66"
           android:textsize="16sp"/> -->
        </linearlayout>
       <linearlayout
         android:layout_width="150dp"
         android:layout_height="33dp"
         android:orientation="horizontal" >
          <!-- 加号 -->
         <button
           android:id="@+id/pro_add"
           android:layout_width="wrap_content"
           android:layout_height="34dp"
           android:text="+" />
         <textview
           android:id="@+id/pro_count"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="bottom"
           android:layout_margintop="10dp"
           android:text="88"
           android:textsize="13sp"/>
           <!-- 减号-->
          <button
           android:id="@+id/pro_reduce"
           android:layout_width="wrap_content"
           android:layout_height="34dp"
           android:layout_marginright="0dp"
           android:text="-" />
         </linearlayout>
     </linearlayout>
 </linearlayout>
</linearlayout>

布局效果如下所示:

Android实现的仿淘宝购物车demo示例

第三步、我们来编写适配器adapter中的代码,即shoppingcartadapter,具体代码如下所示:

package jczb.shoping.adapter;
import java.util.list;
import cn.jpush.android.data.r;
import jczb.shoping.adapter.productslistadapter.viewholder;
import jczb.shoping.adapter.productslistadapter.searchlist;
import jczb.shoping.model.productsonsorting_cate;
import jczb.shoping.model.shoppingcart;
import jczb.shoping.model.sonsortigns;
import jczb.shoping.ui.r;
import jczb.shoping.ui.shoppingcartactivity;
import android.content.context;
import android.content.intent;
import android.content.dialoginterface.onclicklistener;
import android.os.bundle;
import android.view.layoutinflater;
import android.view.view;
import android.view.viewgroup;
import android.widget.baseadapter;
import android.widget.button;
import android.widget.checkbox;
import android.widget.imageview;
import android.widget.linearlayout;
import android.widget.textview;
public class shoppingcartadapter extends baseadapter {
  private context mcontext;
  private list<shoppingcart> mlist;
  public shoppingcartadapter(context mcontext,list<shoppingcart> mlist) {
    super();
    this.mcontext = mcontext;
    this.mlist = mlist;
    }
  @override
  public int getcount() {
    // todo auto-generated method stub
    if (mlist==null) {
      return 0;
    }else {
      return this.mlist.size();
    }
  }
  @override
  public object getitem(int position) {
    // todo auto-generated method stub
    if (mlist == null) {
      return null;
    } else {
      return this.mlist.get(position);
    }
  }
  @override
  public long getitemid(int position) {
    // todo auto-generated method stub
    return position;
  }
  @override
  public view getview(int position, view convertview, viewgroup parent) {
    // todo auto-generated method stub
    viewholder holder = null;
    if (convertview == null) {
      holder = new viewholder();
  convertview = layoutinflater.from(this.mcontext).inflate(r.layout.activity_shoppingcart_item, null,true);
      holder.image=(imageview) convertview.findviewbyid(r.id.pro_image);
      holder.chose=(checkbox) convertview.findviewbyid(r.id.pro_checkbox);
      holder.proname=(textview) convertview.findviewbyid(r.id.pro_name);
      holder.proprice=(textview)convertview.findviewbyid(r.id.pro_shopprice);
      holder.procount=(textview) convertview.findviewbyid(r.id.pro_count);
      convertview.settag(holder);
    } else {
      holder = (viewholder) convertview.gettag();
    }
    if (this.mlist != null) {
      shoppingcart shoppinglist=this.mlist.get(position);
      holder.proname.settext(shoppinglist.getproname().tostring());
      holder.proprice.settext(shoppinglist.getshopprice().tostring());
      holder.procount.settext(shoppinglist.getprocount().tostring());
    }
    return convertview;
  }
  /*定义item对象*/
  public class viewholder {
    imageview image;
    textview proname;
    checkbox chose;
    textview proprice;
    textview procount;
 }
}

第四步,编写java类里面的代码,我们先来编写shoppingcartitemactivity.java中的内容,具体代码如下所示:

package jczb.shoping.ui;
import android.app.activity;
import android.os.bundle;
public class shoppingcartitemactivity extends activity {
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_shoppingcart_item);
 }
}

第五步,编写shoppingcartactivity.java里面的内容,如下所示:

package jczb.shoping.ui;
import java.util.hashmap;
import java.util.list;
import java.util.map;
import jczb.shoping.adapter.shoppingcartadapter;
import jczb.shoping.common.agentapi;
import jczb.shoping.model.shoppingcart;
import jczb.shoping.ui.searchactivity.viewholder;
import jczb.shoping.ui.shoppingcartactivity2.mythread;
import com.alibaba.fastjson.json;
import android.r.string;
import android.app.activity;
import android.content.intent;
import android.os.bundle;
import android.os.handler;
import android.os.message;
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.listview;
import android.widget.textview;
import android.widget.toast;
public class shoppingcartactivity extends activity{
  textview jiesuan,proname,shopprice,procount;
  listview alistview;
  private layoutinflater layoutinflater;
  private textview name;
    protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_shoppingcart);
    findviewbyid();
    /*开始线程*/
    new thread(new mythread()).start();{
  }
   /*根据id找到控件*/
   public void findviewbyid(){
     alistview=(listview) findviewbyid(r.id.cart_shopping_listview);
    }
  //开辟线程
    public class mythread implements runnable {
      public void run() {
        message msg = new message();
        try {
          map<string, string> parmas = new hashmap<string, string>();
          parmas.put("username", "1");
          parmas.put("password", "2");
    string url = "http://192.168.1.110:8080/schoolshopjson/shoppingcart.txt";
          // 要发送的数据和访问的地址
          string result = agentapi.dopost(parmas, url);
 // 如果返回的为空或者初始化时输入的ip地址无效(会返回下面的字符串),说明服务器连接失败!
          if (result == null) {
            // 使用-1代表服务器连接失败
            msg.what = -1;
          } else {
            msg.what=1;
            msg.obj=result;
          }
        } catch (exception e) {
          e.printstacktrace();
          // 使用-1代表程序异常
          msg.what = -2;
          msg.obj = e;
        }
        mhandler.sendmessage(msg);
      }
    }
    protected void initview() {
      // todo auto-generated method stub
    }
     /*子线程-解析数据*/
     private handler mhandler = new handler(){
      public void handlemessage(message msg) {
        switch (msg.what) {
        case -1:
          toast.maketext(shoppingcartactivity.this, "服务器连接失败!",
              toast.length_short).show();
          break;
        case -2:
          toast.maketext(shoppingcartactivity.this, "哎呀,出错啦...",
              toast.length_short).show();
          break;
        case 1:
          string temp = (string)msg.obj;
          //将拿到的json转换为数组
      list<shoppingcart> shoppingcartinfo = json.parsearray(temp,shoppingcart.class);
    listview.setadapter(new shoppingcartadapter(shoppingcartactivity.this, shoppingcartinfo));
          break;
        default:
          break;
        }
      }
    };
}

我们来看一下运行的效果,如下所示:

Android实现的仿淘宝购物车demo示例

更多关于android相关内容感兴趣的读者可查看本站专题:《android布局layout技巧总结》、《android视图view技巧总结》、《android编程之activity操作技巧总结》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android文件操作技巧汇总》、《android编程开发之sd卡操作方法汇总》、《android开发入门与进阶教程》、《android资源操作技巧汇总》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。