Android实现的仿淘宝购物车demo示例
本文实例讲述了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布局的效果,如下图所示:
接着我们来布局第二个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>
布局效果如下所示:
第三步、我们来编写适配器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相关内容感兴趣的读者可查看本站专题:《android布局layout技巧总结》、《android视图view技巧总结》、《android编程之activity操作技巧总结》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android文件操作技巧汇总》、《android编程开发之sd卡操作方法汇总》、《android开发入门与进阶教程》、《android资源操作技巧汇总》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。
上一篇: Spring+quartz实现定时发送邮件功能实例
下一篇: PHP防止图片盗用(盗链)的方法小结
推荐阅读
-
Android实现的仿淘宝购物车demo示例
-
Android实现仿淘宝购物车增加和减少商品数量功能demo示例
-
Android中实现淘宝购物车RecyclerView或LIstView的嵌套选择的逻辑
-
Android中实现淘宝购物车RecyclerView或LIstView的嵌套选择的逻辑
-
Android仿英语流利说取词放大控件的实现方法(附demo源码下载)
-
Android编程实现仿美团或淘宝的多级分类菜单效果示例【附demo源码下载】
-
Android编程实现仿美团或淘宝的多级分类菜单效果示例【附demo源码下载】
-
Android仿淘宝搜索联想功能的示例代码
-
Android仿淘宝搜索联想功能的示例代码
-
Android实现调用系统相册和拍照的Demo示例