仿京東商城系列10------添加購物車阿趁,管理購物車功能實現(xiàn)

本項目來自菜鳥窩,有興趣者點擊http://www.cniao5.com/course/

項目已經(jīng)做完晓锻,
https://github.com/15829238397/CN5E-shop


仿京東商城系列0------項目簡介
仿京東商城系列1------fragmentTabHost實現(xiàn)底部導(dǎo)航欄
仿京東商城系列2------自定義toolbar
仿京東商城系列3------封裝Okhttp
仿京東商城系列4------輪播廣告條
仿京東商城系列5------商品推薦欄
仿京東商城系列6------下拉刷新上拉加載的商品列表
仿京東商城系列7------商品分類頁面
仿京東商城系列8------自定義的數(shù)量控制器
仿京東商城系列9------購物車數(shù)據(jù)存儲器實現(xiàn)
仿京東商城系列10------添加購物車歌焦,管理購物車功能實現(xiàn)
仿京東商城系列11------商品排序功能以及布局切換實現(xiàn)(Tablayout)
仿京東商城系列12------商品詳細信息展示(nativie與html交互)
仿京東商城系列13------商品分享(shareSDK)
仿京東商城系列14------用戶登錄以及app登錄攔截
仿京東長城系列15------用戶注冊,SMSSDK集成
仿京東商城系列16------支付SDK集成
仿京東商城系列17------支付功能實現(xiàn)
仿京東商城系列18------xml文件讀妊舛摺(地址選擇器)
仿京東商城系列19------九宮格訂單展示
仿京東商城系列20------終章


前言

之前我們講了自定義控件NumControlerView (數(shù)量控制器)以及封裝的購物車數(shù)據(jù)庫存儲器的實現(xiàn)独撇。接下來我們便可以完善購物車的功能結(jié)構(gòu)。先看后做躁锁,上效果圖:

購物車.gif

內(nèi)容

  • 頁面設(shè)計:
    購物車頁面如上圖所示纷铣,有兩個頁面(商品結(jié)算頁面,購物車信息編輯頁面)
    1.商品結(jié)算頁面战转,最上層是一個自定義toolbar(右端有編輯按鈕搜立,點擊跳轉(zhuǎn)為編輯頁面),然后是一個RecyclerView(展示被加入購物車的商品信息)槐秧,在下方有結(jié)算按鈕和總價統(tǒng)計還有全選按鈕啄踊。
    2.購物車信息編輯頁面,最上層是一個自定義toolbar(右端有完成按鈕刁标,點擊跳轉(zhuǎn)為結(jié)算頁面)颠通,然后是一個RecyclerView(展示被加入購物車的商品信息),在下方刪除按鈕膀懈,全選按鈕顿锰。

具體布局代碼:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.example.cne_shop.widget.CnToolbar
        android:id="@+id/toolBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        android:minWidth="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:title="購物車"
        android:titleTextColor="@color/white"
        app:isShowSearchView="false"
        app:rightButtonText="編輯"
        ></com.example.cne_shop.widget.CnToolbar>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@+id/sumPart"
            android:layout_alignParentTop="true"
            android:id="@+id/recycleView">

        </android.support.v7.widget.RecyclerView>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/sumPart"
            android:layout_alignParentBottom="true"
            android:paddingTop="10dp"
            android:paddingBottom="10dp"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:gravity="center_vertical"
            android:background="@color/cardview_shadow_start_color"
            >

            <CheckBox
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/checkbox_all"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:checked="true"
                android:paddingLeft="5dp"
                style="@style/CustomCheckboxTheme"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="5dp"
                android:paddingRight="10dp"
                android:text="全選"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@+id/checkbox_all"
                android:id="@+id/allSelect"
                />

            <TextView
                android:id="@+id/txt_total"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/white"
                android:text="合計 ¥0.0"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@+id/allSelect"
                />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_alignParentRight="true"
                android:text="去結(jié)算"
                android:id="@+id/pay_button"
                android:textColor="@color/white"
                android:background="@color/red"/>

        </RelativeLayout>

    </RelativeLayout>

</LinearLayout>
  • 功能分析:
    在進行代碼設(shè)計之前,我們先對購物車頁面功能進行分析。
    1.添加商品和商品展示硼控。
    2.改變商品數(shù)量
    3.選擇刪除已添加的商品
    4.選擇結(jié)算商品去結(jié)算

  • 添加商品和商品展示流程:
    1.例如當(dāng)點擊hot頁面的立即購買按鈕時刘陶,將會調(diào)用添加購物車方法。我們將選中商品的信息賦值到ShoppingCat類型的對象里牢撼。
    1.1將商品的信息賦值到ShoppingCat類型的對象

 public ShoppingCart toShoppinfCart(){

        ShoppingCart cart = new ShoppingCart() ;

        cart.setId(this.id);
        cart.setCount(1);
        cart.setChecked(true);
        cart.setImgUrl(this.imgUrl);
        cart.setName(this.name);
        cart.setPrice(this.price);

        return cart ;
    }

2.得到該對象后將該對象用我們之前封裝的Cartprovider(購物車數(shù)據(jù)存儲器)將該對象信息以Json字符串的格式存入SharedPreferences中匙隔,而購物車頁面的ReclerviewAdapter會立即重新從SharedPreferences加載商品信息,并展示浪默。

 public void addToCart( int position ){

        Ware hotGoodsMsgPart = mHotAdapter.getData(position) ;

        CartProvider.getCartProvider(getContext()) .put( hotGoodsMsgPart );
        Toast.makeText( getContext() , "已添加到購物車" , Toast.LENGTH_SHORT ).show();
    }
  • 改變商品數(shù)量:
    1.當(dāng)點擊數(shù)量控制器的+/-號時牡直,顯示的數(shù)據(jù)會發(fā)生改變之外,會立即更改SharedPreferences內(nèi)存儲的數(shù)據(jù)纳决。
  cartAdapter.setNumControlerListener(new CartAdapter.NumControlerListener() {

            @Override
            public void onAdd(int position , int value) {
                Log.d("----" , "點擊了+++控件") ;
                if (shoppingCarts == null)
                    shoppingCarts = cartProvider.getAll();
                shoppingCarts.get(position).setCount(value);
                cartProvider.update(shoppingCarts.get(position));
                getSum();

            }

            @Override
            public void onSub(int position , int value) {
                Log.d("----" , "點擊了---控件") ;
                if (shoppingCarts == null)
                    shoppingCarts = cartProvider.getAll();
                shoppingCarts.get(position).setCount(value);
                cartProvider.update(shoppingCarts.get(position));
                getSum();

            }
        });
  • 選擇刪除已添加的商品:
    1.點擊自定義Toolbar右邊的編輯按鈕碰逸,切換編輯按鈕。
    2.選擇要刪除的按鈕即可刪除阔加。在選擇刪除的時候立即刪除SharedPreferences內(nèi)存儲的數(shù)據(jù)饵史。刷新界面。
 pay_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(statua == STATUS_NORNAL){
                    //去結(jié)算
                }else if (statua == STATUS_EDIT){
                    deleteCartData() ;
                }
            }
        });

-選擇結(jié)算商品
結(jié)算功能將在后面博文講述胜榔。


購物車的功能就先講到這里胳喷,結(jié)算的功能將方法到后續(xù)繼續(xù)介紹。有興趣的可以點擊頁首的git地址查看工程源碼夭织。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吭露,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子尊惰,更是在濱河造成了極大的恐慌讲竿,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弄屡,死亡現(xiàn)場離奇詭異题禀,居然都是意外死亡,警方通過查閱死者的電腦和手機膀捷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門迈嘹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人全庸,你說我怎么就攤上這事秀仲。” “怎么了壶笼?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵啄育,是天一觀的道長。 經(jīng)常有香客問我拌消,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任墩崩,我火速辦了婚禮氓英,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鹦筹。我一直安慰自己铝阐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布铐拐。 她就那樣靜靜地躺著徘键,像睡著了一般。 火紅的嫁衣襯著肌膚如雪遍蟋。 梳的紋絲不亂的頭發(fā)上吹害,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音虚青,去河邊找鬼它呀。 笑死,一個胖子當(dāng)著我的面吹牛棒厘,可吹牛的內(nèi)容都是我干的纵穿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼奢人,長吁一口氣:“原來是場噩夢啊……” “哼谓媒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起何乎,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤句惯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宪赶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宗弯,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年搂妻,在試婚紗的時候發(fā)現(xiàn)自己被綠了蒙保。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡欲主,死狀恐怖邓厕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扁瓢,我是刑警寧澤详恼,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站引几,受9級特大地震影響昧互,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一敞掘、第九天 我趴在偏房一處隱蔽的房頂上張望叽掘。 院中可真熱鬧,春花似錦玖雁、人聲如沸更扁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浓镜。三九已至,卻和暖如春劲厌,著一層夾襖步出監(jiān)牢的瞬間膛薛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工脊僚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留相叁,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓辽幌,卻偏偏與公主長得像增淹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乌企,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容