官术网_书友最值得收藏!

4.6 實戰(zhàn)項目:購物車

購物車的應用面很廣,凡是電商App都可以看到購物車的身影。本章以購物車為實戰(zhàn)項目,除了購物車使用廣泛的特點,還因為購物車用到多種存儲方式。現(xiàn)在我們開啟購物車的體驗之旅吧!

4.6.1 設計思路

先來看常見的購物車的外觀。第一次進入購物車頻道,購物車里面是空的,如圖4-25所示。接著去商品頻道選購手機,隨便挑幾款加入購物車,然后返回購物車,即可看到購物車里的商品列表,有商品圖片、名稱、數(shù)量、單價、總價等信息,如圖4-26所示。

圖4-25 空空如也的購物車

圖4-26 購物車的商品列表

購物車的存在感很強,并不僅僅在購物車頁面才能看到。往往在商場頻道,甚至某個商品詳情頁面,都會看到某個角落冒出一個購物車圖標。一旦有新商品加入購物車,購物車圖標上的商品數(shù)量就立馬加一。當然,用戶也可以點擊購物車圖標直接跳轉到購物車頁面。商品頻道除了商品列表外,頁面右上角還有一個購物車圖標,這個圖標有時在頁面右上角,有時又在頁面右下角,如圖4-27所示。商品詳情頁面通常也有購物車圖標,如果用戶在詳情頁面把商品加入購物車,那么圖標上的數(shù)字也會加一,如圖4-28所示。

現(xiàn)在看看購物車到底采取了哪些存儲方式。

  • 數(shù)據(jù)庫SQLite:最直觀的是數(shù)據(jù)庫,購物車里的商品列表一定放在SQLite中,增刪改查都少不了SQLite。

圖4-27 手機商場的商品列表

圖4-28 商品詳情頁面

  • 共享參數(shù)SharedPreferences:注意不同頁面的右上角購物車圖標都有數(shù)字,表示購物車中的商品數(shù)量,商品數(shù)量建議保存在共享參數(shù)中。因為每個頁面都要顯示商品數(shù)量,如果每次都到數(shù)據(jù)庫中執(zhí)行count操作,就會很消耗資源。因為商品數(shù)量需要持久地存儲,所以不適合放在全局內(nèi)存中,不然下次啟動App時,內(nèi)存中的變量又從0開始。
  • SD卡文件:通常情況下,商品圖片來自于電商平臺的服務器,這年頭流量是很寶貴的,可是圖片恰恰很耗流量(尤其是大圖)。從用戶的錢包著想,App得把下載的圖片保存在SD卡中。這樣一來,下次用戶訪問商品詳情頁面時,App便能直接從SD卡獲取商品圖片,不但不花流量而且加快瀏覽速度,一舉兩得。
  • 全局內(nèi)存:訪問SD卡的圖片文件固然是個好主意,然而商品頻道、購物車頻道等可能在一個頁面展示多張商品小圖,如果每張小圖都要訪問SD卡,頻繁的SD卡讀寫操作也很耗資源。更好的辦法是把商品小圖加載進全局內(nèi)存,這樣直接從內(nèi)存中獲取圖片,高效又快速。之所以不把商品大圖放入全局內(nèi)存,是因為大圖很耗空間,一不小心就會占用幾十兆內(nèi)存。

不找不知道,一找嚇一跳,原來購物車用到了這么多種存儲方式。

4.6.2 小知識:菜單Menu

之前的章節(jié)在進行某項控制操作時一般由按鈕控件觸發(fā)。如果頁面上需要支持多個控制操作,比如去商場購物、清空購物車、查看商品詳情、刪除指定商品等,就得在頁面上添加多個按鈕。如此一來,App頁面顯得雜亂無章,滿屏按鈕既礙眼又不便操作。這時,就可以使用菜單控件。

菜單無論在哪里都是常用控件,Android的菜單主要分兩種,一種是選項菜單OptionMenu,通過按菜單鍵或點擊事件觸發(fā),對應Windows上的開始菜單;另一種是上下文菜單ContextMenu,通過長按事件觸發(fā),對應Windows上的右鍵菜單。無論是哪種菜單,都有對應的菜單布局文件,就像每個活動頁面都有一個布局文件一樣。不同的是頁面的布局文件放在res/layout目錄下,菜單的布局文件放在res/menu目錄下。

下面來看Android的選項菜單和上下文菜單。

1. 選項菜單OptionMenu

彈出選項菜單的途徑有3種:

(1)按菜單鍵。

(2)在代碼中手動打開選項菜單,即調(diào)用openOptionsMenu方法。

(3)按工具欄右側的溢出菜單按鈕,這個在第7章介紹工具欄時進行介紹。

實現(xiàn)選項菜單的功能需要重寫以下兩種方法。

  • onCreateOptionsMenu:在頁面打開時調(diào)用。需要指定菜單列表的XML文件。
  • onOptionsItemSelected:在列表的菜單項被選中時調(diào)用。需要對不同的菜單項做分支處理。

下面是菜單布局文件的代碼,很簡單,就是menu與item的組合排列:

接下來是使用選項菜單的代碼片段:

按菜單鍵和調(diào)用openOptionsMenu方法彈出的選項菜單都是在頁面下方,如圖4-29所示。

圖4-29 選項菜單的菜單列表

2. 上下文菜單ContextMenu

彈出上下文菜單的途徑有兩種:

(1)默認在某個控件被長按時彈出。通常在onStart函數(shù)中加入registerForContextMenu方法為指定控件注冊上下文菜單,在onStop函數(shù)中加入unregisterForContextMenu方法為指定控件注銷上下文菜單。

(2)在除長按事件之外的其他事件中打開上下文菜單。先執(zhí)行registerForContextMenu方法注冊菜單,然后執(zhí)行openContextMenu方法打開菜單,最后執(zhí)行unregisterForContextMenu方法注銷菜單。

實現(xiàn)上下文菜單的功能需要重寫以下兩種方法。

  • onCreateContextMenu:在此指定菜單列表的XML文件,作為上下文菜單列表項的來源。
  • onContextItemSelected:在此對不同的菜單項做分支處理。

上下文菜單的布局文件格式同選項菜單,下面是使用上下文菜單的代碼片段:

上下文菜單的菜單列表固定顯示在頁面中部,菜單外的其他頁面區(qū)域顏色會變深,具體效果如圖4-30所示。

圖4-30 上下文菜單的菜單列表

4.6.3 代碼示例

這一章的編碼開始有些復雜了,不但有各種控件和布局的操作,還有4種存儲方式的使用,再加上Activity與Application兩大組件的運用,已然是一個正規(guī)App的雛形。

編碼過程分為4步(增加的一步是對AndroidManifest.xml認真配置):

步驟01 想好代碼文件與布局文件的名稱,比如購物車頁面的代碼文件取名ShoppingCartActivity.java,對應的布局文件名是activity_shopping_cart.xml;商場頻道頁面的代碼文件取名ShoppingChannelActivity.java,對應的布局文件名是activity_shopping_channel.xml;商品詳情頁面的代碼文件取名ShoppingDetailActivity,對應的布局文件名是activity_shopping_detail.xml;另有一個全局應用的代碼文件MainApplication.java。

步驟02 在AndroidManifest.xml中補充相應配置,主要有以下3點:

(1)注冊3個頁面的acitivity節(jié)點,注冊代碼如下:

          <activity android:name=".ShoppingCartActivity" android:theme="@style/AppBaseTheme" />
          <activity android:name=".ShoppingChannelActivity" />
          <activity android:name=".ShoppingDetailActivity" />

(2)給application補充name屬性,值為MainApplication,舉例如下:

          android:name=".MainApplication"

(3)聲明SD卡的操作權限,主要補充下面3行權限配置:

          <!-- SD卡讀寫權限 -->
          <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
          <uses-permission android:name="android.permission.READ_EXTERNAL_STORAG" />
          <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

步驟03 res目錄下的XML文件編寫也多了起來,主要工作包括:

(1)在res/layout目錄下創(chuàng)建布局文件activity_shopping_cart.xml、activity_shopping_channel.xml、activity_shopping_detail.xml,分別根據(jù)頁面效果圖編寫3個頁面的布局定義文件。

(2)在res/menu目錄下創(chuàng)建菜單布局文件menu_cart.xml和menu_goods.xml,分別用于購物車的選項菜單和商品項的上下文菜單。

(3)在values/styles.xml中補充下面的樣式定義,給不帶導航欄的購物車頁面使用:

          <style name="AppBaseTheme" parent="Theme.AppCompat.Light" />

步驟04 在項目的包名目錄下創(chuàng)建類MainApplication、ShoppingCartActivity、ShoppingChannelActivity和ShoppingDetailActivity,并填入具體的控件操作與業(yè)務邏輯代碼。

購物車項目的完整代碼參見本書附錄源碼storage模塊的ShoppingCartActivity.java、ShoppingChannelActivity.java和ShoppingDetailActivity.java。下面列出兩塊與存儲技術有關的代碼片段,首先是商場頁面把商品加入購物車的邏輯處理,主要涉及到共享參數(shù)和SQLite數(shù)據(jù)庫的運用,關鍵代碼如下所示:

然后是購物車頁面模擬從網(wǎng)絡上下載商品圖片,并構建簡單的圖片緩存機制的邏輯處理,主要涉及到SD卡文件操作與Application全局變量的運用,關鍵代碼如下所示:

主站蜘蛛池模板: 连州市| 昌平区| 贵港市| 桓仁| 上虞市| 平原县| 射阳县| 清苑县| 绥江县| 靖安县| 乌海市| 安溪县| 西青区| 班戈县| 开封市| 阿克苏市| 礼泉县| 长岭县| 尼木县| 敦化市| 南投市| 木兰县| 安义县| 石嘴山市| 宜都市| 北辰区| 广灵县| 景德镇市| 和平区| 屏南县| 洛阳市| 河源市| 凤翔县| 定边县| 共和县| 江安县| 安宁市| 泾阳县| 隆昌县| 方城县| 酉阳|