热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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

这篇文章主要介绍了Android实现的仿淘宝购物车demo示例,结合实例形式分析了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的文件,代码如下所示:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
     
     
     
     
     
     
  
  
  
    
    
  
  
     
     
     
     
     
    
  


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

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

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
     
    
     
     
     
     
       
       
       
       
    
      
        
       
          
         

布局效果如下所示:

第三步、我们来编写适配器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 mList;
  public ShoppingCartAdapter(Context mContext,List 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 parmas = new HashMap();
          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 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程序设计有所帮助。


推荐阅读
  • 本文探讨了在SharePoint环境中使用BDC(Business Data Catalog)时遇到的问题及其解决策略,包括XML文件导入SSP后的不可见性问题以及与远程SQL Server 2005连接的难题。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 将XML数据迁移至Oracle Autonomous Data Warehouse (ADW)
    随着Oracle ADW的推出,数据迁移至ADW成为业界关注的焦点。特别是XML和JSON这类结构化数据的迁移需求日益增长。本文将通过一个实际案例,探讨如何高效地将XML数据迁移至ADW。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 在使用 MySQL 6.0.x 及以上版本的 JDBC 驱动时,若未正确配置 `serverTimezone` 参数,可能会导致连接异常。本文探讨了这一问题的原因及解决方法。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • 本文介绍了Tomcat的基本操作,包括启动、关闭及首次访问的方法,并详细讲解了如何在IDEA中创建Web项目,配置Servlet及其映射,以及如何将项目部署到Tomcat。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • Hibernate全自动全映射ORM框架,旨在消除sql,是一个持久层的ORM框架1)、基础概念DAO(DataAccessorOb ... [详细]
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
author-avatar
冠吸柏芝霆疯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有