تشارك هذه المقالة رمزًا محددًا لـ RXJAVA Retrofit Appleartation Cart Cart Display للرجوع إليه. المحتوى المحدد كما يلي
أظهر للجميع العروض أولاً
هيكل الإطار:
1.
2. أكمل إضافة بيانات عربة التسوق (إذا لم تكن هناك بيانات على الواجهة ، يمكنك إضافة بيانات باستخدام أداة الواجهة).
3. تخصيص العرض لتنفيذ زر الإضافة والطرح. في كل مرة تنقر فيها على إضافة وطرح ، يجب تغيير العدد الإجمالي والسعر الإجمالي في العنصر وفقًا لذلك.
4. عندما تكون الكمية 1 ، انقر فوق علامة ناقص ، تظل الكمية دون تغيير ، ويطالب الخبز المحمص بالمستخدم بأن الحد الأدنى هو 1.
5. العدد الإجمالي والسعر الإجمالي في الأسفل هما إجمالي السعر والعدد الإجمالي في جميع عناصر العناصر. إذا تم تغيير سعر الكمية في كل عنصر ، فيجب ربط العدد الإجمالي للإجمالي السعر في الأسفل.
6. قم بتنفيذ وظيفة الاختيار المفرد العكسي ، أدخل التحديد الافتراضي لأول مرة ، لا يتم تضمين العدد الإجمالي والسعر الإجمالي في البيانات السفلية عند عدم تحديد العنصر. عند تغيير الحالة المحددة ، يمكن تعديل العدد الإجمالي والسعر الإجمالي للأسفل بشكل صحيح.
7. انقر فوق الزر "حذف" لحذف العنصر. يمكن تعديل العدد الإجمالي والسعر الإجمالي في الأسفل بشكل صحيح ، وسيتم حذف بيانات الواجهة.
إضافة التبعيات المطلوبة وأذونات الشبكات
compile 'com.squareup.retrofit2: retrofit: 2.0.0-beta4' // retrofit2 مطلوب حزمة الحزمة 'com.squareup.retrofit2: converter-gson: 2.0.0-beta4' // converterfactory's gson package compile 'com.squareup.retrofit2: converter-scalars: 2.0.0-beta4' // converterfactory package package package ‘io.Reactivex.rxjava2: rxjava: 2.1.3'Compile 'io.Reactivex.rxjava2 "com.squareup.retrofit2: Adapter-Rxjava2: 2.3.0'Compile 'de.greenrobot: eventbus: 3.0.0-beta1'compile' com.facebook.fresco: fresco: 0.11.0 '
<use-parrishing android: name = "Android.permission.internet" />
من الباطن قبل استخدام وضع MVP
حزمة صافية
API
api api {public static string host = "http://120.27.23.105/product/" ؛}serviceapi
الواجهة العامة serviceapi {get ("getProductDetail") قابلة للتدفق <xqbean> getXQ (Query ("pid") int pid ، Query ("source") string str) ؛ get ("addCart") قابل للتدفق <AddCart> getMsg (Query ("uid") int uid ، Query ("pid") int pid ، Query ("source") string str) ؛ get ("getCarts") قابل للتدفق <Strbean> getCart (Query ("uid") int uid ، Query ("source") string str) ؛}واجهة ناجحة
الواجهة العامة onnetlisenter <t> {void success (t t) ؛}التعبئة التعديل التحديثي
الطبقة العامة retrofithepler {public static okhttpclient okhttpclient ؛ ServiceApi الثابت العام ؛ / *** تنفيذ الأولوية*/ static {getokhttpclient () ؛ } static static okhttpclient getokhttpclient () {if (okhttpclient == null) {synchronized (okhttpclient.class) {if (okhttpclient == null) {okhtpclient = new okhtpclient () ؛ }} إرجاع okhttpclient ؛ } serviceapi static public getServiceApi () {if (serviceapi == null) {synchronized (okhttpclient.class) {if (serviceapi == null) {serviceapi = onCreate (serviceapi.class ، api.host) ؛ }}} إرجاع serviceapi ؛ } ثابت عام <T> t onCreate (الفئة <T> tclass ، url string) {retrofit retrofit = new retrofit.builder () .baseurl (url) .addConverterFactory (gsonconverterfactory.create () .addcalladapterfactory (rxjava2calladapterfactory.create ()) //. إرجاع return.create (tclass) ؛ }} حزمة الفول
فئة الفول للحصول على التفاصيل
الفئة العامة xqbean {/** * msg: * البائع: {"الوصف": "أنا تاجر 2" ، "أيقونة": "http://120.27.23.105/images/icon.png" ، "name": "Merchant 2" ، "ProductNums: {"bargainprice": 111.99 ، "CreateTime": "2017-10-14T21: 48: 08" ، "DEELICURL": "https://item.m.jd.com/product/4719303.html؟utm_source=Androidpp&Utm_Medium=Appshar 335139774 & utm_term = qqfriends "،" الصور ":" https://m.360buyimg.com/n0/jfs/t9004/210/1160 833155/647627/AD6BE059/59B4F4E1N9A2B1532.JPG! 504/338/63721388/491286/F5957F53/598E95F1N7F2ADB87.JPG! M/N0/JFS/T7441/10/64242474/419246/ADB30A7D/598E95FBND989BA0A.JPG! ، "Pid": 9 ، "Price": 78.99 ، "pscid": 1 ، "salenum": 2356 ، "Sellerid": 2 ، "subhead": "كل مهرجان في منتصف الخريف لا يمكن أن يكون بسيطًا. الأصابع "،" العنوان ":" Beijing Daoxiangcun Daoxiangcun Mid-Autumn Festival Mooncake Old Beijing Mooncake Gift Box 655G "} */ private String MSG ؛ بائع البائع الخاص ؛ رمز السلسلة الخاص ؛ بيانات قاعدة البيانات الخاصة ؛ السلسلة العامة getMsg () {return msg ؛ } public void setMsg (String msg) {this.msg = msg ؛ } Public Sellerbean getSeller () {return Seller ؛ } public void setseller (Sellerbean Seller) {this.seller = seller ؛ } السلسلة العامة getCode () {return code ؛ } public void setCode (string code) {this.code = code ؛ } databean getData () {return data ؛ } public void setData (databean data) {this.data = data ؛ } الفئة الثابتة العامة Sellerbean {/** * الوصف: أنا تاجر 2 * أيقونة: http://120.27.23.105/images/icon.png * الاسم: Merchant 2 * ProductNums: 999 * SCORE: 5.0 */////private String Develd ؛ أيقونة السلسلة الخاصة ؛ اسم السلسلة الخاصة ؛ Private Int ProductNums ؛ درجة مزدوجة خاصة ؛ خاص int sellerid. السلسلة العامة getDescription () {return description ؛ } public void setDescription (وصف السلسلة) {this.description = description ؛ } السلسلة العامة geticon () {return icon ؛ } public void seticon (string icon) {this.icon = icon ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } public int getProductNums () {return productNums ؛ } public void setProductNums (int productNums) {this.productNums = productNums ؛ } public double getScore () {return score ؛ } public void setScore (نقاط مزدوجة) {this.score = score ؛ } public int getSellerId () {return sellerid ؛ } public void setSellerId (int sellerid) {this.sellerId = sellerid ؛ }} databean public static class { /** * bargainprice: 111.99 * createTime: 2017-10-14T21: 48: 08 * Delationurl: https://item.m.jd.com/product/4719303.html؟utm_source=AndroidApp&utm_medium=appshare&utm_campaign=t_33513974&utm_term=qqfriends * الصور: الصور: https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/AD6BE059/59B4 f4e1n9a2b1532.jpg! 388/491286/F5957F53/598E95F1N7F2ADB87.JPG! Q70.JPG | https: //m.360buyimg.co M/N0/JFS/T7441/10/64242474/419246/ADB30A7D/598E95FBND989BA0A.JPG! Q70.JPG * itemType: 2 * PID: 9 * السعر: 78.99 * PSCID: 1 * المبيعات: 2356 * Sellerid: 2 * Subhead: كل مهرجان منتصف الخريف لا يمكن أن يكون بسيطًا. بغض النظر عن مكان وجودك ، فأنت بحاجة دائمًا إلى قطعة من الكعكة لجعل حياتك أكثر اكتمالا. JD Mooncakes يجعل الحب أكثر اكتمالا JD الذي يعمل ذاتيًا ، وتوصيل البرق ، والمزيد من المفاجآت ، يرجى النقر مع إصبعك * العنوان: Beijing Daoxiangcun Daoxiangcun Mid-Autumn Festival Mooncake Old Beijing Mooncake Gift Box 655G */ Private Double Parmainprice ؛ سلسلة خاصة سلسلة خاصة بالتفاصيل ؛ صور سلسلة خاصة private int itemType ؛ Private Int Pid ؛ سعر مزدوج خاص ؛ pscid int الخاص ؛ Private Int Salesenum ؛ خاص int sellerid. السلسلة الخاصة. عنوان السلسلة الخاصة ؛ public double getBargainPrice () {return bargainprice ؛ } public void setBarGainPrice (pargainprice double) {this.bargainprice = bargainprice ؛ } السلسلة العامة getCreateTime () {return createTime ؛ } public void setCreateTime (String CreateTime) {this.createTime = createTime ؛ } السلسلة العامة getDetailurl () {return detailurl ؛ } public void setDetailurl (سلسلة تفاصيل) {this.detailurl = deliefurl ؛ } السلسلة العامة getImages () {return Images ؛ } public void setImages (string images) {this.images = Images ؛ } public int getItemType () {return itemType ؛ } public void setItemType (int itemType) {this.itemtype = itemType ؛ } public int getPid () {return pid ؛ } public void setPid (int pid) {this.pid = pid ؛ } public double getPrice () {return price ؛ } public void setPrice (price double) {this.price = price ؛ } public int getPscid () {return pscid ؛ } public void setpscid (int pscid) {this.pscid = pscid ؛ } public int getSalenum () {return salesenum ؛ } public void setSalenum (int salesenum) {this.salenum = salesenum ؛ } public int getSellerId () {return sellerid ؛ } public void setSellerId (int sellerid) {this.sellerId = sellerid ؛ } السلسلة العامة getubhead () {return subhead ؛ } public void setSubhead (سلسلة subhead) {this.subhead = subhead ؛ } السلسلة العامة getTitle () {return title ؛ } public void settitle (tring title) {this.title = title ؛ }}}أضاف الفول إلى العربة
الفئة العامة addCart {private string msg ؛ رمز السلسلة الخاص ؛ السلسلة العامة getMsg () {return msg ؛ } public void setMsg (String msg) {this.msg = msg ؛ } السلسلة العامة getCode () {return code ؛ } public void setCode (string code) {this.code = code ؛ }}فئة المنتج
الفئة العامة Cartbean { /*** msg: طلب ناجح* رمز: 0* البيانات: [{"list": [{"bargainprice": 22.9 ، "CreateTime": "2017-10-14T21: 48: 08" ، "DEALLERL": "https://item.m.jd.com/product/2542855.html؟utm_source-source & utm_medium = appshare & utm_campaign = t_335139774 & utm_term = qqfriends "،" صور ": 56F0A08FNBD3A1235.JPG! 802996626/155915/e5e90d7a/56f0a09cn33e01bd0.jpg! q70.jpg | https: //m.360buy img.com/n0/jfs/t1882/31/2772215910/389956/c8dbf370/56f0a0a2na0c86.jpg ! A913/57709035N33857877.JPG! 》 "،" title ":" Three Squirrel Nous Snacks Snacks Creamy Pecan 225g/Bag "} ، {" bargainprice ": 11800 ،" CreateTime ":" 2017-10t17: 33: 37 "، .html؟ utm#_source = Androidapp & utm#_medium = appshare & utm#_campaign = t#_335139774 & utm#_term = qqfriends "،" الصور ":" https://m.360buyimg.com/n0/jfs /155/2098998076/156185/6CF95035/595DD5A5NC3A7DAB5.JPG! PID ": 57 ،" Price ": 5199 ،" pscid ": 40 ،" Selection ": 0 ،" Sellerid ": 1 ،" subhead ":" 【i5 MX150 2G VIDEO MEMIMY] Full HD HD NARROW BOZEL 8G MEMORY 256 SSD يدعم SSD التعرف على بصمات الأصابع قبل نظام WIN10 "،" العنوان ":" Xiaomi (MI) Air 13.3 بوصة ، فولت ، FHD Full Thin Contention Silver/R/N "} ، {" bargainprice ": 99 ،" CreateTime ":" 2017-10-14T21: 38: 26 "،" DEELICURL ":" https://item.m.jd.com/product/4345173.html؟utm#_sourceorce=andoidapp&maed_medium=appium=app share & utm#_campaign = t#_335139774 & utm#_term = qqfriends "،" الصور ":" https: //m.360buyimg .com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10na4ec7f39.jpg! q70.jpg | https: . Q70.jpg | https: //m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12 N5B900606.JPG! الوحش! 1 "،" Sellerid ":" 1 "} ، {" list ": [{" bargainprice ": 6666 ،" createTime ":" 2017-10t16: 01: 31 "، .html؟ utm#_source = Androidapp & Utm#_medium = appshare & utm#_campaign = t#_335139774 & utm#_term = qqfriends "،" صور ": 59B857F2N6CA75622.JPG! 6/68AF5B54/59B8480ANE8AF7C.JPG! 007/56140/579509D9/59B85801NFEA207DB.JPG! مختلف "،" العنوان ":" Apple iPhone 8 Plus (A1864) 64GB Mobile Mobile Unicom Telecom 4G Mobile "}] ،" Sellername ":" Merchant 2 "،" sellerid ":" 2 "} ، {" list ": [{" bargainprice ": 111.99 ،" createTime ":" 2017-10-03t23: 43: 53 "، utm_medium = appshare & utm_campaign = t_335139774 & utm_term = qqfriends "،" الصور ":" https://m.360buyimg.com /n0/jfs/t9004/210/1160833155/647627/AD6BE059/59B4F4E1N9A2B1532.JPG! N0/JFS/T7504/338/63721388/491286/F5957F53/598E95F1N7F2ADB87.JPG! /jfs/T7441/10/64242474/419246/ADB30A7D/598E95FBND989BA0A.JPG! "pscid": 1 ، "تم اختياره": 0 ، "Sellerid": 5 ، "Head": "كل مهرجان في منتصف الخريف لا يمكن أن يكون بسيطًا. بغض النظر عن مكانك ، فأنت بحاجة دائمًا إلى كعكة لجعل حياتك أكثر اكتمالًا. Festival Mooncake Old Beijing Mooncake Gift Box 655g "}] ،" Sellername ":" Merchant 5 "،" Sellerid ":" 5 "} ، {" list ": [{" bar GainPrice ": 11800 ،" CreateTime ":" 2017-10-03T23: 53: 28 "،" DEELICURL ":" https://mitem.jd.hk/ware/view.act أيون؟ Wareid = 1988853309 & cachekey = 1acb07a701ece8d2434a6ae7fa6870a1 "،" الصور ":" https://m.360buyimg.com/ N0/JFS/T6130/97/1370670410/180682/1109582A/593276B1ND81FE723.JPG! Q70.JPG | https: //m.360buyimg.com/n 0/JFS/T5698/110/2617517836/202970/C9388FB/593276B7NBD94EF1F.JPG! /jfs/t5698/110/2617517836/202970/C9388Feb/593276B7NBD94EF1F.JPG! /jfs/t5815/178/2614671118/51656/7F52D137/593276C7N107B725A.JPG! FS/T5878/60/2557817477/30873/4502B606/593276CAN5A7D6357.JPG! منتجات Office لـ 1 Yuan والعودة إلى تذاكر Train لـ 5 Yuan (بمجرد انتهاء العائد) "،" العنوان ":" الشراء العالمي لـ Apple Models MacBook Pro Apple Silver VP2 New 13 بوصة BAR I5/8G/256G "}] ،" Sellername ":" Merchant ":" Merchant " 6 "،" Sellerid ":" 6 "} ، {" list ": [{" bargainprice ": 399 ،" createTime ":" 2017-10-03t23: 53: 28 "، utm_source = Androidapp & utm_medium = appshare & utm_campaign = t_335139774 & utm_term = qqfriends " ، "الصور": "https://m.360buyimg.com/n0/jfs/t5887/201/859509257/69994/6bde9bf6/5924c24n E854E14C.JPG! /59224C24N3324D5F4.JPG! 4/5C73D281/59224C24N3324D5F4.JPG! غسل بسيط خمس أكياس من السراويل المستقيمة الجينز الضيقة 941825 داكنة الرمادي 33/32 (175/84A) "}] ،" sellername ":" التاجر 7 "،" Sellerid ":" 7 "} ، {" list ": [{" bargainprice ": 111.99 ،" CreateTime ":" 2017-10-14t21: 39: 05 "، UCT/4719303.html؟ utm_source = androidapp & utm_medium = appshare & utm_campaign = t_335139774 & utm_term = qqfriends "،" الصور ":" https: //m.36 0buyimg.com/n0/jfs/t9004/210/1160833155/647627/AD6BE059/59B4F4E1N9A2B153 2.JPG! 5957F53/598E95F1N7F2ADB87.JPG! 41/10/64242474/419246/ADB30A7D/598E95FBND989BA.JPG! Q70.JPG "،" NUM ": 12 ،" p ID ": 1 ،" السعر ": 118 ،" PSCID ":" تم اختياره ": 0 ،" Sellerid ": 17 ،" Head ":" كل مهرجان في منتصف الخريف لا يمكن أن يكون بسيطًا. Daoxiangcun Mid-Autumn Festival Mooncake Old Beijing Mooncake Gift Box 655G "}] ،" Sellername ":" Merchant 17 "،" Solderid ":" 17 "} ، {" list ": [{" Bargainprice ": 111.99 ،" Creathetime: "2017-10-14:" : //item.m.jd.com/product/4719303.html؟ utm_source = androidapp & utm_medium = appshare & utm_campaign = t_335139774 & utm_trem = qqfriys "،" الصور ":" https: // m .360buyimg.com/N0/JFS/T9004/210/1160833155/647627/AD6BE059/59B4F4E1N9A2B 1532.jpg! /f5957f53/598E95F1N7F2ADB87.JPG! 7441/10/64242474/419246/ADB30A7D/598E95FBND989BA0A.JPG! Q70.JPG "،" NUM ": 4 ، "Pid": 2 ، "Price": 299 ، "pscid": 1 ، "Selection": 0 ، "Sellerid": 18 ، "subhead": "كل مهرجان في منتصف الخريف لا يمكن أن يكون بسيطًا. بغض النظر عن مكان وجودك ، فأنت بحاجة دائمًا إلى الحصول على قطعة من الكعكة ، فالأمر الخاص بك لجعل حياتك أكثر اكتمالا ، JD Mooncics تجعل الحب أكثر اكتمالًا ، jd. Daoxiang Village Daoxiang Village Mid-Autumn Festival Mooncake Old Beijing Mooncake Gift Box 655G "}] ،" Sellername ":" Merchant 18 "،" Sellerid ":" 18 "} ، {" list ": [{" bargainprice ": 11800 ،" CreateTime ":" 2017-10-03t23: 53: 28 "، /view.action؟wareid=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1"،"images": semrestts://m.360buyimg.com/n0/jfs/t6130/97/1 370670410/180682/1109582A/593276B1ND81FE723.JPG! Q70.JPG | https: //m.360buy img.com/n0/jfs/t5698/110/2617517836/202970/c9388fb/593276b7nbd94ef1f.jp G! 88fb/593276b7nbd94ef1f.jpg! 178/2614671118/51656/7F52D137/593276C7N107B725A.JPG! Q70.JPG | https: //m.36 0buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502B606/593276CAN5A7D6357. jpg! VP2 NEW 13 بوصة BAR I5/8G/256G "}] ،" Sellername ":" Merchant 20 "،" Sellerid ":" 20 "} ، {" list ": [{" bargainprice ": 111.99 ،" createTime ":" 2017-10-14t21: 39: 05 "، p & utm_medium = appshare & utm_campaign = t_335139774 & utm_term = qqfriends "،" الصور ":" https: //m.360buyimg. COM/N0/JFS/T9004/210/1160833155/647627/AD6BE059/59B4F4E1N9A2B1532.JPG! .com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1n7f2adb87.jpg! q70.jpg | https: //m.360buyimg. COM/N0/JFS/T7441/10/64242474/419246/ADB30A7D/598E95FBND989BA0A.JPG! E ": 88.99 ،" PSCID ": 1 ،" مختارة ": 0 ،" SellerId ": 21 ،" Head ":" كل مهرجان في منتصف الخريف لا يمكن أن يكون بسيطًا. Daoxiangcun Mid-Autumn Festival Mooncake Old Beijing Mooncake Gift Box 655G "}] ،" Sellername ":" Merchant 21 "،" Sellerid ":" 21 "}]] */ Private String MSG ؛ رمز السلسلة الخاص ؛ قائمة خاصة <Catabean> بيانات ؛ السلسلة العامة getMsg () {return msg ؛ } public void setMsg (String msg) {this.msg = msg ؛ } السلسلة العامة getCode () {return code ؛ } public void setCode (string code) {this.code = code ؛ } القائمة العامة <CataBean> getData () {return data ؛ } public void setData (قائمة <CataBean> data) {this.data = data ؛ } dataBean { /** *** القائمة: [} ium = appshare & utm_campaign = t_335139774 & utm_term = qqfriends "،" الصور ":" https://m.360buyimg.com/n0/jfs/t1930/284/2865629620/390243/E3ADE9C4/56F08 FNBD3A1235.JPG! 626/155915/e5e90d7a/56f0a09cn33e01bd0.jpg! q70.jpg | https: //m.360buyimg.c OM/N0/JFS/T1882/31/2772215910/389956/C8DBF370/56F0A0A2NA0C86EA6.JPG! Q70 .jpg | https: //m.360buyimg.com/n0/jfs/t2620/166/270333710/312660/531AA913 /577709035N3338578777.JPG! اشترها》》 "،" العنوان ":" Three Squirrel Nous Snacks Creamy Creamy Pecan 225G/BAG "} ، {" BargainPrice ": 11800 ،" CreateTime ":" 2017-10-0t17: 33: 37 ، tml؟ utm#_source = Androidapp & utm#_medium = appshare & utm#_campaign = t#_335139774 & utm#_term = qqfriends "،" الصور ":" https://m.360buyimg.com/n0/jfs 155/2098998076/156185/6CF95035/595DD5A5NC3A7DAB5.JPG! MX150 2G VIDEO MEMIMY] Full HD HD NARROW BOZEL 8G MEMORY 256 SSD يدعم SSD التعرف على بصمات الأصابع قبل نظام WIN10 "،" العنوان ":" Xiaomi (MI) Air 13.3 بوصة ، فولت ، FHD Full Thin Contention Silver/R/N "} ، {" bargainprice ": 99 ،" CreateTime ":" 2017-10-14T21: 38: 26 "،" DEELICURL ":" https://item.m.jd.com/product/4345173.html؟utm#_sourceorce=andoidapp&maed_medium=appium=app share & utm#_campaign = t#_335139774 & utm#_term = qqfriends "،" الصور ":" https: //m.360buyimg .com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10na4ec7f39.jpg! q70.jpg | https: . Q70.jpg | https: //m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12 N5B900606.JPG! Monster! سلسلة خاصة بائع ؛ قائمة خاصة <ListBean> ؛ فحص منطقي خاص ؛ Boolean Public Ischeck () {return check ؛ } public void setCheck (check boolean) {this.check = check ؛ } السلسلة العامة getSellerName () {return sellername ؛ } public void setSellerName (String sellername) {this.sellerName = sellerName ؛ } السلسلة العامة getSellerId () {return sellerid ؛ } public void setSellerId (String sellerid) {this.sellerId = soliderid ؛ } القائمة العامة <ListBean> getList () {return list ؛ } public void setlist (list <ListBean> list) {this.list = list ؛ } الفئة الثابتة العامة listbean { /** * bargainprice: 22.9 * CreateTime: 2017-10-14T21: 48: 08 * DEELICURL: https://item.m.jd.com/product/2542855.html؟utm_source=AndroidApp&utm_medium=appshare&utm_campaign=t_33513974&utm_term=qqfriends * الصور: https://m.360buyimg.com/n0/jfs/t1930/284/2865629620/390243/E3ADE9C4/56F0A08FNBD3A1235.JPG! | https: //m.360buyimg.com/n0/jfs/t2137/336/2802996626/155915/e5e90d7a/56f0a09cn33e01bd0.jpg! q70.jpg | https: //m.360buyimg.com/n0/jfs/t1882/31/2772215910/389956/c8dbf370/56f0a0a2na0c86.jpg! q70.jpg | https: //m.360buyimg.com/n0/jfs/t2620/166/2703833710/312660/531AA913/57709035N33857777.JPG! Q70.JPG * NUM: 1 * PID: 24 * السعر: 288.0 * PSCID: 2 * تم اختياره: 0 * SolderID: 1 * Head: Three Squirrel Snacks عرض خاص ، 50 قبالة للمشتريات أكثر من 99 في المنطقة ، و 100 من المراهنات التي تزيد عن عام 199 في المنطقة في المنطقة ، وشراء》 * العنوان: Three Fansirrel Snacks Snacks Plained Pygium 225g. سلسلة خاصة سلسلة خاصة بالتفاصيل ؛ صور سلسلة خاصة خاص int num ؛ Private Int Pid ؛ سعر مزدوج خاص ؛ pscid int الخاص ؛ تم اختيار INT الخاص ؛ خاص int sellerid. السلسلة الخاصة. عنوان السلسلة الخاصة ؛ الخاص int cou = 1 ؛ public int getCou () {return cou ؛ } public void setcou (int cou) {this.cou = cou ؛ } فحص منطقي خاص ؛ Boolean Public Ischeck () {return check ؛ } public void setCheck (check boolean) {this.check = check ؛ } public double getBarGainPrice () {return bargainprice ؛ } public void setBarGainPrice (pargainprice double) {this.bargainprice = bargainprice ؛ } السلسلة العامة getCreateTime () {return createTime ؛ } public void setCreateTime (String CreateTime) {this.createTime = createTime ؛ } السلسلة العامة getDetailurl () {return detailurl ؛ } public void setDetailurl (سلسلة تفاصيل) {this.detailurl = deliefurl ؛ } السلسلة العامة getImages () {return Images ؛ } public void setImages (string images) {this.images = Images ؛ } public int getNum () {return num ؛ } public void setNum (int num) {this.num = num ؛ } public int getPid () {return pid ؛ } public void setPid (int pid) {this.pid = pid ؛ } public double getPrice () {return price ؛ } public void setPrice (price double) {this.price = price ؛ } public int getPscid () {return pscid ؛ } public void setpscid (int pscid) {this.pscid = pscid ؛ } public int getSelected () {return select ؛ } public void setSelected (int choched) {this.selected = select ؛ } public int getSellerId () {return sellerid ؛ } public void setSellerId (int sellerid) {this.sellerId = sellerid ؛ } السلسلة العامة getubhead () {return subhead ؛ } public void setSubhead (سلسلة subhead) {this.subhead = subhead ؛ } السلسلة العامة getTitle () {return title ؛ } public void settitle (tring title) {this.title = title ؛ }}}} برنامج
الطبقة العامة myApp يمتد التطبيق {Override public void onCreate () {super.oncreate () ؛ Fresco.Initialize (هذا) ؛ }} عرض الطبقة
اكتب واجهتين أولاً
الواجهة العامة icart {void showlist (قائمة <Cartbean.databean> grouplist ، قائمة <list <cartbean.databean.listbean >> eildlist) ؛} الواجهة العامة iview <T> {void showbean (t t) ؛ showstr باطلة (سلسلة S) ؛}تخطيط الصفحة الرئيسية
<؟ Xmlns: Tools = "http://schemas.android.com/tools Android: id = "@+id /elv" Android: layout_weight = "1" Android: layout_width = "wall_content" Android: layout_height = "wrap_content" /> <liearlayout android: layout_weight = "9 Android: layout_height = "match_parent"> <checkbox android: id = "@+id /quanxuan" Android: layout_width = "wall_content" Android: layout_height = "wall_content" /> <textview android: "select all" android: <LineArlayout Android: layout_marginleft = "50dp" Android: extream = "vertical" Android: layout_width = "wall_content" Android: layout_height = "wall_content"> <textview android: id = "@id/zongjia" Android: layout_width = Android: text = "إجمالي السعر: 0.0" /> <textView android: text = "Total 0 items" Android: id = "@+id /tv_count" Android: layout_width = "wall_content" Android: layout_height = "wrap_content" /> < /linearlayout> Android: layout_marginleft = "100dp" Android: layout_width = "wall_content" Android: layout_height = "wall_content"/> </linearlayout> </linearlayout>
الصفحة الرئيسية
يمتد النشاط الرئيسي للطبقة العامة التي يمتد AppCompatActivity Icart {private explistview melv ؛ مربع الاختيار الخاص Mquanxuan ؛ TextView Mzongjia الخاص ؛ textview الخاص mtvcount ؛ myexpandableadapter الخاص myexpandableadapter ؛ Override محمية void onCreate (backdle SaveInstancestate) {super.oncreate (SaveInstancestate) ؛ setContentView (r.layout.activity_main) ؛ initview () ؛ cartpresenter جديد (هذا) .getCart () ؛ eventBus.getDefault (). سجل (هذا) ؛ mquanxuan.setonClickListener (new view.onclickListener () {Override public void onClick (view v) {myexpandableadapter.qx (mquanxuan.ischecked ()) ؛}}) ؛ } private void initview () {melv = (expensableListView) findViewById (r.id.elv) ؛ mquanxuan = (مربع الاختيار) FindViewById (r.id.quanxuan) ؛ mzongjia = (textView) findViewById (r.id.zongjia) ؛ mtvcount = (textView) findViewById (r.id.tv_count) ؛ } Override public void showlist (قائمة <Cartbean.databean> grouplist ، قائمة <list <cartbean.databean.listbean >> ilfildlist) {myexpandableadapter = new myexpandableadapter (grouplist ، this ، childlist) ؛ melv.setAdapter (myexpandableadapter) ؛ لـ (int i = 0 ؛ i <grouplist.size () ؛ i ++) {melv.expandgroup (i) ؛ }} // تلقي القيمة المرسلة subsubscribe public void onpriceandcount (countandprice cp) {mzongjia.settext ("total"+cp.getCount ()+"item") ؛ mtvcount.settext ("total:"+cp.getPrice ()) ؛ }. } override محمية void ondestroy () {super.ondestroy () ؛ EventBus.getDefault (). unregister (هذا) ؛ }}تخطيط الصفحة الثانية
<؟ Android: layout_height = "match_parent" Android: extrientation = "vertical" Android: id = "@+id/activity_add" أدوات: context = "com.bwie.zhangzhen20170108. Android: id = "@+id /xqsdv1" Android: layout_gravity = "center" Android: layout_height = "300dp" /> <textview android: id = "@+id /tvtitle1" android: layout_width = "match_parent" android: layout_height = Android: extrientation = "horizontal" Android: layout_width = "match_parent" Android: layout_height = "wall_content"> <button android: id = "@id/tiaozhuan1" Android: layout_weight = "1" Android: text = "android" Android: layout_height = "wall_content"/> <button android: id = "@+id/tianjia1" Android: layout_weight = "1" Android: text = "add to cart" Android: layout_width = "match_parent" Android: layout_height = "wall_content"
تنفيذ رمز عربة التسوق
يمتد AppCompataCtivity AppCompativitive عرض العرض. TextView الخاص mtvtitle ؛ زر خاص mtiaozhuan ؛ زر خاص Mtianjia ؛ خطي خاص maddactivity ؛ XQPRESENTER SPERSPRESENTER ؛ Override محمية void onCreate (backdle SaveInstancestate) {super.oncreate (SaveInstancestate) ؛ setContentView (R.Layout.activity_add) ؛ initview () ؛ XQPRESENTER = جديد XQPRESENTER (هذا) ؛ xqpresenter.getxq () ؛ } private void initview () {mxqsdv = (simpledRaweeView) findViewById (r.id.xqsdv1) ؛ mtvtitle = (textView) findViewById (r.id.tvtitle1) ؛ mtiaozhuan = (زر) findViewById (r.id.tiaozhuan1) ؛ mtiaozhuan.setonClickListener (هذا) ؛ mtianjia = (زر) findViewById (r.id.tianjia1) ؛ mtianjia.setonClickListener (هذا) ؛ maddactivity = (linearlayout) findViewById (r.id.activity_add) ؛ } Override public void onClick (view v) {switch (v.getId ()) {default: break ؛ // Skip to MainActivity (عربة التسوق) Case R.ID.Tiaozhuan1: بدء النشاط (نية جديدة (هذا ، MainActivity.class)) ؛ استراحة؛ Case R.id.tianjia1: xqpresenter.getadd () ؛ استراحة؛ }} Override public void showbean (object o) {xqbean xqbean = (xqbean) o ؛ xqbean.databean data = xqbean.getData () ؛ سلسلة s = data.getImages (). split ("// |") [0] ؛ uri uri = uri.parse (s) ؛ // العنوان الذي تم تحويله إلى uri mxqsdv.setimageuri (uri) ؛ mtvtitle.settext (data.getTitle ()+"/n"+data.getPrice ()) ؛ } Override public void showstr (سلسلة s) {toast.maketext (هذا ، s ، toast.length_short) .show () ؛ }} حزمة EventBus
حدد فئة من الكمية والسعر
الطبقة العامة countandprice {private int count ؛ سعر الباحث الخاص ؛ public int getCount () {return count ؛ } public void setCount (int count) {this.count = count ؛ } public int getPrice () {return price ؛ } public void setPrice (int price) {this.price = price ؛ }}EventBus
الطبقة العامة messgeevent {private boolean check ؛ Boolean Public Ischeck () {return check ؛ } public void setCheck (check boolean) {this.check = check ؛ }} نموذج
قم بتنفيذ واجهة طبقة النموذج لصفحة التفاصيل
الواجهة العامة IXQModel {public void getxq (int pid ، String str ، onnetlisenter النهائي <xqbean> cgsb) ؛}قم بتنفيذ نموذج صفحة التفاصيل
تنفذ XQModel من الفئة العامة IXQModel {Override public void getxq (int pid ، String str ، onnetlisenter النهائي <xqbean> onnetlisenter) {flowable <xqbean> flowable = retrofithepler.getServiceApi (). getxq (pid ، str) ؛ flowable.Observeon (AndroidsChedulers.MainThread ()) .Subscribeon (Schedulers.io ()) .Subscribe (مستهلك جديد <xqbean> () { @override قبول (xqbean xqbean) استثناء {onnetlisenter.success (xqbean) ؛ } public void getAdd (int uid ، int pid ، string str ، onnetlisenter final <addcart> onnetlisenter) {flowable <addCart> flowable = retrofithepler.getServiceApi (). getMsg (UID ، pid ، str) ؛ flowable.observeon (androidschedulers.mainthread ()) .Subscribeon (Schedulers.io ()) .SubScribe (مستهلك جديد <AddCart> () {Override public void قبول (AddCart addcart) يلقي استثناء {onnetlisenter.success (addcart) ؛ }}نموذج عربة التسوق
cartmodel الفئة العامة {public void getCart (int uid ، string str ، onnetlisenter النهائي <cartbean> onnetlisenter) {flowable <Trbean> flowable = retrofithepler.getServiceApi (). getCart (uid ، str) ؛ flowable.observeon (androidschedulers.mainthread ()) .Subscribeon (Schedulers.io ()) .Subscribe (مستهلك جديد <Strbean> () {Override public void قبول (Cartbean Cartbean) يلقي استثناءً {onnetlisenter.success (cartbean) ؛}}) ؛ }} طبقة مقدم العرض
P-Layer من صفحة التفاصيل
الفئة العامة XQPRESENTER {Private Final XQMODEL XQMODEL ؛ iview iview الخاص ؛ Public XQPresenter (iview iview) {xqmodel = new xqmodel () ؛ this.iview = iview ؛ } public void getxq () {xqmodel.getxq (12 ، "Android" ، new onnetlisenter <xqbean> () {Override public void success (xqbean xqbean) {iview.showbean (xqbean) ؛}}) ؛ } public void getAdd () {xqmodel.getadd (3043 ، 12 ، "Android" ، new onnetlisenter <addCart> () {Override public void success (addCart addCart) {iview.showstr (addCart.getMsg ()) ؛}) ؛ }}مستوى P من عربة التسوق
cartpresenter الطبقة العامة {private icart icart ؛ عارضات cartmodel النهائي الخاص ؛ cartpresenter العامة (icart icart) {this.icart = icart ؛ cartmodel = جديد cartmodel () ؛ ) ArrayList <> () ؛ }}محول
الطبقة العامة myexpandableadapter يمتد baseexpandablelistadapter {قائمة خاصة <cartbean.databean> groupdata ؛ سياق السياق الخاص ؛ قائمة خاصة <list <cartbean.databean.listbean >> قائمة الطفل ؛ Public MyExpandableadApter (قائمة <Trbean.databean> groupdata ، سياق السياق ، القائمة <list <cartbean.databean.listbean >> childlist) {this.groupdata = groupdata ؛ this.context = السياق ؛ this.childlist = ilfildlist ؛ } Override public int getGroupCount () {return GroupData.size () ؛ } Override public int getChildRencount (int grouapposition) {return ChildList.get (grouapposition) .Size () ؛ } Override public object getGroup (int grouapposition) {return GroupData.get (grouapposition) ؛ } Override public object getChild (int grouapposition ، int childposition) {return null ؛ } Override Public GetGroupId (int grouapposition) {return grouapposition ؛ } Override Public GetChildId (int grouapposition ، int childposition) {return ilingposition ؛ } @Override public boolean hasStableIds() { return false; } @Override public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { final GroupViewHolder holder; if (convertView == null) { convertView = View.inflate(context, R.layout.group_item, null); holder = new GroupViewHolder(); holder.tv_group = (TextView) convertView.findViewById(R.id.tv_group); holder.group_cb = (CheckBox) convertView.findViewById(R.id.gx_group); convertView.setTag(holder); } else { holder = (GroupViewHolder) convertView.getTag(); } final CartBean.DataBean dataBean = groupdata.get(groupPosition); String sellerName = dataBean.getSellerName(); holder.group_cb.setChecked(dataBean.isCheck()); //Click the status of the first-level checkbox holder.group_cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dataBean.setCheck(holder.group_cb.isChecked()); //Change the status of all children changeChildState(groupPosition,holder.group_cb.isChecked()); EventBus.getDefault().post(jS()); //Judge the status of all selected by judging the checkbox of the first level changeMianQXstatus(checkGroupAll()); notifyDataSetChanged(); } }); return convertView; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { final ChildViewHolder holder; if (convertView == null) { convertView = View.inflate(context, R.layout.child_item, null); holder = new ChildViewHolder(); holder.tv_title= (TextView) convertView.findViewById(R.id.title); holder.price= (TextView) convertView.findViewById(R.id.price); holder.child_cb= (CheckBox) convertView.findViewById(R.id.gouxuan_child); holder.add= (TextView) convertView.findViewById(R.id.jia); holder.del= (TextView) convertView.findViewById(R.id.del); holder.jian= (TextView) convertView.findViewById(R.id.jian); holder.sdv= (SimpleDraweeView) convertView.findViewById(R.id.title_img); holder.tv_num= (TextView) convertView.findViewById(R.id.tv_num); holder.yanse= (TextView) convertView.findViewById(R.id.yanse); convertView.setTag(holder); } else { holder = (ChildViewHolder) convertView.getTag(); } final CartBean.DataBean.ListBean listBean = childlist.get(groupPosition).get(childPosition); int price = (int) listBean.getPrice(); holder.child_cb.setChecked(listBean.isCheck()); holder.price.setText("¥:"+price+""); String title = listBean.getTitle(); holder.tv_title.setText(title); String subhead = listBean.getSubhead(); String substring = subhead.substring(1, 10)+"......"; holder.yanse.setText(substring); String images = listBean.getImages(); String[] split = images.split("//|"); String s = split[0]; Uri uri=Uri.parse(s); holder.sdv.setImageURI(uri); // listBean.setCou(Integer.parseInt(holder.tv_num.getText().toString())); // checkBox click event holder.child_cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listBean.setCheck(holder.child_cb.isChecked()); EventBus.getDefault().post(jS()); //If the checkBox of the second level is selected, let the checkBox of the first level checkBox check if(holder.child_cb.isChecked()) { if (ischeckAllchild(groupPosition)) { //Change the status of the first level checkBox changeGroupstatus(groupPosition,true); //Change the status of the selected state by judging the status of the first level CheckBox to changeMianQXstatus(checkGroupAll()); } }else{ changeGroupstatus(groupPosition,false); changeMianQXstatus(checkGroupAll()); } notifyDataSetChanged(); } }); //Click add function holder.add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int cou = listBean.getCou(); holder.tv_num.setText(++cou+""); listBean.setCou(cou); if(holder.child_cb.isChecked()){ EventBus.getDefault().post(jS()); } } }); //Click the function of decreasing holder.jian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int cou = listBean.getCou(); if(cou==1) { Toast.makeText(context, "The minimum number is 1", Toast.LENGTH_SHORT).show(); return;} holder.tv_num.setText(--cou+""); listBean.setCou(cou); if (holder.child_cb.isChecked()) { EventBus.getDefault().post(jS()); } } }); //Click to delete holder.del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { List<CartBean.DataBean.ListBean> listBeen = childlist.get(groupPosition); CartBean.DataBean.ListBean remove = listBeen.remove(childPosition); if(listBeen.size()==0){ childlist.remove(childPosition); groupdata.remove(groupPosition); } EventBus.getDefault().post(jS()); notifyDataSetChanged(); } }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } class GroupViewHolder { CheckBox group_cb; TextView tv_group; } class ChildViewHolder { CheckBox child_cb; TextView tv_title,price,yanse,tv_num; TextView del,add,jian; SimpleDraweeView sdv; } /** * Determine that all the second level is CheckBox or not checked* */ private boolean ischeckAllchild(int g){ List<CartBean.DataBean.ListBean> listBeen = childlist.get(g); for (int i = 0; i <listBeen.size() ; i++) { CartBean.DataBean.ListBean listBean = listBeen.get(i); if(!listBean.isCheck()){ return false; } } return true; } /** * Calculate quantity and price* Get the second-level CheckBox by traversing the first-level. If it is the selected selected state, count their total quantity and price*/ private CountAndPrice jS(){ int cou=0; int jiage=0; for (int i = 0; i <groupdata.size() ; i++) { for (int j = 0; j <childlist.get(i).size() ; j++) { CartBean.DataBean.ListBean listBean = childlist.get(i).get(j); if(listBean.isCheck()){ cou+=listBean.getCou(); jiage+=(int)listBean.getPrice()*listBean.getCou(); } } } } CountAndPrice countAndPrice = new CountAndPrice(); countAndPrice.setCount(cou); countAndPrice.setPrice(jiaage); return countAndPrice; } /** * Change the status of the first-level list*/ private void changeGroupstatus(int groupPosition,boolean flag ){ CartBean.DataBean dataBean = groupdata.get(groupPosition); dataBean.setCheck(flag); } /** * Change the status of all selected* */ private void changeMianQXstatus(boolean flag){ MessgeEvent messageEvent = new MessgeEvent(); messageEvent.setCheck(flag); EventBus.getDefault().post(messgeEvent); } /** * Determine whether all the first level are selected*/ private boolean checkGroupAll(){ for (int i = 0; i < groupdata.size(); i++) { if(!groupdata.get(i).isCheck()){ return false; } } return true; } /** * Change the status of all children*/ private void changeChildState(int grouPistion,boolean flag){ List<CartBean.DataBean.ListBean> listBeen = childlist.get(grouPistion); for (int i = 0; i < listBeen.size(); i++) { listBeen.get(i).setCheck(flag); } } /** * Change all selected*/ public void qx(boolean flag){ for (int i = 0; i < groupdata.size(); i++) { changeGroupstatus(i, flag); changeChildState(i, flag); } EventBus.getDefault().post(jS()); notifyDataSetChanged(); }}group_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="horizontal"> <CheckBox android:id="@+id/gx_group" android:focusable="false" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_group" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
child_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"> <TextView android:id="@+id/title" android:layout_marginLeft="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <CheckBox android:layout_marginLeft="20dp" android:gravity="center_vertical" android:id="@+id/gouxuan_child" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.facebook.drawee.view.SimpleDraweeView android:gravity="center_vertical" android:id="@+id/title_img" android:layout_width="50dp" android:layout_height="50dp" /> <LinearLayout android:orientation="vertical" android:layout_marginLeft="30dp" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/price" android:layout_marginLeft="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/yanse" android:layout_marginLeft="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <LinearLayout android:layout_marginLeft="100dp" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/jian" android:layout_width="20dp" android:layout_height="20dp" android:textSize="15sp" android:text="一"/> <TextView android:id="@+id/tv_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:paddingBottom="2dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="2dp" android:text="1" /> <TextView android:id="@+id/jia" android:layout_width="20dp" android:layout_height="20dp" android:layout_marginLeft="5dp" android:text="+" android:textSize="15sp"/> </LinearLayout> </LinearLayout> <TextView android:id="@+id/del" android:layout_marginLeft="20dp" android:text="删除" android:textColor="#FFFFFF" android:background="#ff3660" android:layout_width="32dp" android:layout_height="29dp" /> </LinearLayout></LinearLayout>
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.