Android仿淘寶購物車demo

       夏的熱情漸漸退去,秋如期而至,豐收的季節,小編繼續着實習之路,走着走着,就走到了購物車,逛過淘寶或者是京東的小夥伴都知道購物車裏面的寶貝可不止一件,對於愛購物的姑娘來講,購物車裏面的商品恐怕是爆滿,添加不進去了,之前逛淘寶的時候,小編沒有想過要怎麼樣實現購物車,就知道在哪兒一個勁兒的逛,可是如今不同了,小編作爲一個開發者,想的就是該如何實現,搗鼓了兩天的時間,用listview來實現,已經有模有樣了,如今小編就來簡單的總結一下實現購物車的心路歷程,幫助有須要的小夥伴,歡迎小夥伴們留言交流。html

       首先,小編簡單的介紹一下listview,ListView 控件可以使用四種不一樣視圖顯示項目。經過此控件,可將項目組成帶有或不帶有列標頭的列,並顯示伴隨的圖標和文本。 可以使用 ListView 控件將稱做 ListItem 對象的列表條目組織成下列四種不一樣的視圖之一:1.大(標準)圖標2.小圖標3.列表4.報表 View 屬性決定在列表中控件使用何種視圖顯示項目。還可用 LabelWrap 屬性控制列表中與項目關聯的標籤是否可換行顯示。另外,還可管理列表中項目的排序方法和選定項目的外觀。今天小編主要和小夥伴們分享一下,如何使用listview實現購物的功能。作過Android的小夥伴都知道一個xml對應一個java類,可是購物車有點不同,由於她裏面的商品有可能不僅一件,因此咱們須要有兩個xml,兩個java類,相對應的還須要一個適配器adapter,一個model,下面小編來詳細的介紹一下實現購物車的過程。java

        第一步,寫model層,相似咱們以前寫過的實體層,具體代碼以下所示:android

        

/*** * 說明:購物車的相關信息 * 做者:丁國華 * 時間: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,代碼以下所示:json

 

<?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; } } }; } 

       咱們來看一下運行的效果,以下所示:app

        

      小編寄語:該博文,小編主要簡單的介紹瞭如何實現購物車,使用listview顯示多件商品,總的實現思路就是先寫model,接着寫xml裏面,寫完xml寫adapter適配器裏面的內容,最後寫java裏面的代碼。購物車實現了,可是小編到如今仍是雲裏霧裏,不過不要緊,小編會越挫越勇的,這就是生命的意義,仍是那句話對於小編來講,既是挑戰更是機遇,由於知識都是相通的,再者來講,在小編的程序人生中,留下最珍貴的記憶,雖然之後小編不必定從事安卓這個行業,代碼世界裏,不少種事,有的甜蜜,有的舒適,有的婉轉成歌,有的綿延不息,在這些故事裏,咱們惟一的共通之處就是,某年,某月,某個波瀾不驚的日子裏,曾經很愛很愛你!愛你--這段實習的日子裏,安卓帶給小編的種種的驚喜。ide