تشارك هذه المقالة رمز التسوق المحدد لـ RXJAVA Retrofit Application للتسوق للمرجع للجميع. المحتوى المحدد كما يلي
صورة التكاثر:
1. الاعتماد
anotationprocessor 'com.jakewharton: butterknife-compiler: 8.8.1' compile 'com.jakewharton: butterknife: 8.8.1' compile 'com.android.support: 'com.squareup.retrofit2: converter-gson: 2.3.0' compile 'com.facebook.fresco: fresco: 0.12.0' compile 'com.facebook.fresco: animated-base-support: 0.12.0' compile 'com.fresco.fresco: webp: 0.12.0' compile 'com.facebook.fresco: webpsupport: 0.12.0' compile 'io.reactivex.rxjava2: rxjava: 2.1.7' compile 'com.squareup.retrofit2: adapter-rxjava2: 2.3.0' io.reactivex.rxjava2: rxandroid: rxandroid: 'com.squareup.okhttp3: Okhttp: 3.9.0' compile 'com.google.code.gson: gson: 2.8.1'
2. التصميم
1. الإضافات التصميم layout_add_delete
<؟ <textView Android: id = "@+id/txt_delete" Android: layout_width = "30dp" Android: layout_height = "30dp" Android: text = "prouction" Android:+"center" android: "#8B948B"/> <edittx Android: layout_margintop = "2dp" Android: layout_width = "50dp" Android: layout_height = "30dp" android: background = "@drawable/edit" android: id = "0.00" android = "center" android: "1"/> Android: layout_width = "30dp" Android: layout_height = "30dp" Android: text = "plus" android: "center" android: background = "#8b948b"/> </linearlayout>
2. تفاصيل المنتج تخطيط Activity_main
<؟ Android: layout_height = "match_parent"> <linearlayout android: layout_width = "match_parent" Android: layout_height = "match_parent" Android: eachtation = "vertical"> <com.facebook.drawee.view.simpledRaweeview android: id = Android: layout_width = "match_parent" Android: layout_height = "450dp" fresco: placeholderimage = "@mipmap/ic_launcher"/> <textview android: id = "@+id/goodtle Android: layout_margin = "10dp" Android: text = "aahhh it is your your your your yours" android: textsize = "20dp" /> <textView android: id = "@+id /goods_price" Android: layout_width = "wrap_content" android: layout_height = 18132 "Android: textColor ="#dc5f2e "Android: TESTSTIZE =" 18DP " /> <textview android: layout_width =" wrap_content "android: layout_height =" rab_content "android: layout_margin = 10dp" android: </linearlayout> <linearlayout android: layout_alignparentbottom = "true" Android: layout_width = "match_parent" Android: layout_height = "50dp" Android: eachtation = "horizontal"> <button android: id = "id/btn_addcart" android: Android: layout_width = "0dp" Android: layout_height = "match_parent" Android: background = "#ffc207" Android: text = "add to shorking cart"/> <button Android: id = "@id/btn_shopping" Android: layout_weight = "1" "1" Android: background = "#ff6b06" Android: text = "buy now"/> </linearlayout> </sernativelayout>
3. Activity_Main2 Active_Main2
<؟ Android: id = "@+id/top_bar" Android: layout_width = "match_parent" Android: layout_height = "48dp" android: background = "#f7f7f7" Android: eacheration = "abertical"> <Relativelayout Android: layout_width = "match_parent" android: Android: background = "@android: color/drapparent" Android: extrientation = "vertical"> <imageview android: id = "@id/back" android: layout_width = "48dp" Android: layout_height = "48dp" Android: layout_alignparentleft = "true android: Android: src = "@drawable /back" /> <textView android: layout_width = "match_parent" Android: layout_height = "wall_content" Android: Gravity = "Center" Android: "MinHeight =" 48dp "Android: text = textv: textColor = Android: id = "@+id/edit" Android: layout_width = "wall_content" Android: layout_height = "wall_content" Android: layout_alignparentright = "true" Android: text_marginRight = "40DP" Android: textColor = "#1A1A1A" Android: SPERSISESE = "14SP" Android: الرؤية = "مرئي"/> </relativelayout> </itelearlayout> <sevesablistview android: id = "@+id/exlistview" Android: layout_width = "match_parent" android: Android: layout_weight = "1" Android: childIndicator = "@null" Android: groupIndicator = "@null"> </sexpantableListView> <linearlayout android: layout_width = "match_parent" android: layout_height = "50dp" android: Android: id = "@+id/all_chekbox" Android: layout_marginleft = "20dp" Android: layout_width = "wall_content" android: layout_height = "wall_content"/> <linearlayout android: id = "@+id/ll_info" android: layout_width = "0dp" android: layout_height = "wall_content" android: layout_weight = "4" Android: layout_marginRight = "20dp" Android: layout_weight = "1"> <linearlayout android: layout_width = "match_parent" Android: layout_height = "wrap_content" android: eachtation = "horizontal" android: "right". Android: layout_height = "wall_content" Android: layout_marginleft = "5dp" Android: text = "Total:" Android: textizeize = "18sp" Android: textStyle = "Bold" /> <textView Android: id = "@id /total_price" Android: layout_width = Android: text = "¥ 0.00" Android: textColor = "#f23232" Android: textizeize = "16sp" Android: textStyle = "Bold"/> </linearlayout> <textView android: id = "@id/total_number المنتجات: 0 قطع "Android: Gravity =" Right "Android: SPERSISESIZE =" 16SP "Android: TextStyle =" Bold "/> </lineArlayout> <textView android: id =" id+id/tv_go_to_pay "Android: layout_width =" match_parent "android: layout_height = Android: background = "#fd7a05" Android: clickable = "true" Android: Gravity = "Center" Android: text = "clear" Android: textColor = "#fafafa" /> <textview android: id = "@id /tv_go_to_del Android: layout_weight = "3" Android: background = "#e2231c" Android: clickable = "true" android: gravity = "center" android: text = "delete" android:
4. قائمة المجموعة الثانوية على مستوى المجموعة ex_group_item
<؟ Android: eachtion = "horizontal"> <checkbox android: id = "@+id/group_checkbox" Android: layout_marginleft = "20dp" android: layout_width = "wall_content" android: layout_height = "wall_content" android: "false"/> Android: layout_marginleft = "20dp" Android: layout_width = "wall_content" Android: layout_height = "wall_content" Android: textsize = "16dp" /> </linearlayout>
5. القائمة الثانوية sub-layout ex_child_item
<؟ xmlns: fresco = "http://schemas.android.com/apk/res-auto" Android: layout_width = "match_parent" Android: layout_height = "230dp" Android: eachtation = "theorizontal"> <checkbox android: id = "id = Android: layout_marginleft = "20dp" Android: layout_marginbottom = "50dp" Android: layout_width = "wrap_content" Android: layout_height = "wrap_content" /> <relativelayout Android: layout_marginleft = "20dp" Android: Layout_WIDTH = Android: layout_height = "match_parent"> <textView android: id = "@+id/shop_title" Android: layout_width = "wall_content" Android: layout_height = "wrap_content" android: layout_alignparentleft = "true" android: "layout_alignterent = Android: layout_marginStart = "17dp" Android: text = "textView" Android: layout_alignparenttop = "true" /> <!-<imageview android: id = "@+id /shop_img" Android: layout_width = "90dp" Android: layout_height = التطبيق: srccompat = "@mipmap/ic_launcher" Android: layout_below = "@id/shop_name" Android: layout_alignparentleft = "true" android: layout_alignstart = "true"/>-> Android: layout_width = "90dp" Android: layout_height = "90dp" Android: layout_margintop = "30dp" fresco: placeholderimage = "@mipmap/ic_launcher" Android: layout_below = id/shop_name Android: layout_alignparentStart = "true"/> <textView Android: id = "@+id/shop_price" Android: layout_width = "wall_content" Android: layout_height = "wrap_content" android: layout_aligntop = id+id/shop_img: Android: layout_margintop = "10dp" Android: text = "¥ 20" Android: textColor = "#f23232"/> <com.bwei.gepeng.myview.addddeleview android: id = "id/add" Android: layout_width = "160dp" Android: Android: layout_below = "@+id/shop_price" Android: layout_margintop = "30dp" Android: layout_marginleft = "140dp" app: left_text = "-" app: right_text = "+" app: middle_text = 1 "Android:" false " Android: id = "@+id /shop_delete" Android: layout_width = "wall_content" Android: layout_height = "wall_content" Android: layout_alignparentend = "true" Android: layout_alignright = "true" android: condervertal </slativelayout> </linearlayout>
3. فئة الكيان
1. MessageBean
حزمة com.bwei.gepeng.entity ؛ الفئة العامة MessageBean <T> {برمز السلسلة الخاصة ؛ بيانات T الخاصة ؛ سلسلة خاصة MSG ؛ بائع البائع الخاص ؛ السلسلة العامة getCode () {Return Code ؛ } public void setCode (string code) {this.code = code ؛ } public t getData () {return data ؛ } public void setData (t data) {this.data = data ؛ } السلسلة العامة getMsg () {return msg ؛ } public void setMsg (String msg) {this.msg = msg ؛ } Public Sellerbean getSeller () {return Seller ؛ } public void setseller (Sellerbean Seller) {this.seller = seller ؛ } الفئة الثابتة العامة SellerBean {/** * الوصف: أنا تاجر 19 * أيقونة: http://120.27.23.105/images/icon.png * الاسم: Merchant 19 * ProductNums: 999 * SCORE: 5.0 * Sellerid: 19 */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 ؛ }}}2.goodsshowbean
حزمة com.bwei.gepeng.entity ؛ الطبقة العامة goodsshowbean {private double pargainprice ؛ سلسلة خاصة سلسلة خاصة بالتفاصيل ؛ صور سلسلة خاصة 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 ؛ } Override public string toString () {return "goodshowbean {" + "bargainprice =" + bargainprice + "، createTime = '" + createTime +'/' + "، deliefurl =" + " + pididtype +"/' ' + " Price = " + Price +" ، pscid = " + pscid +" ، salesenum = " + salesenum +" ، sellerid = " + sellerid +" ، subhead = " + subhead + '/' +" ، title = '" + title +'/'' + '}' ؛ }}3
حزمة com.bwei.gepeng.entity ؛ استيراد java.util.list ؛ الطبقة العامة Cartbean {private string sellername ؛ سلسلة خاصة بائع ؛ قائمة خاصة <ListBean> ؛ السلسلة العامة 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 {private double pargainprice ؛ سلسلة خاصة سلسلة خاصة بالتفاصيل ؛ صور سلسلة خاصة خاص int num ؛ Private Int Pid ؛ سعر مزدوج خاص ؛ pscid int الخاص ؛ تم اختيار INT الخاص ؛ خاص 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 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 getSelerId () {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 ؛ }} Override public string toString () {return "cartbean {" + "sellername =" " + sellername + '/' ' +" ، sellerid =' " + solderid + '/' ' +" ، list = " + list +'} '؛ }}4. Groupbean
حزمة com.bwei.gepeng.entity ؛ الطبقة العامة GroupBean {private String SellerName ؛ مجموعة منطقية خاصة ؛ GroupBean العام (String SellerName ، Boolean Groupucb) {this.SellerName = sellername ؛ this.gropucb = groupucb ؛ } السلسلة العامة getSellerName () {return sellername ؛ } public void setSellerName (String sellername) {this.sellerName = sellerName ؛ } boolean public istgropucb () {return groupucb ؛ } public void setgropucb (boolean groupucb) {this.gropucb = groupucb ؛ } Override public string toString () {return "groupbean {" + "sellername = '" + sellername +'/'' + "، groupucb =" + groupucb + '}' ؛ }}5. شيلدبيان
حزمة com.bwei.gepeng.entity ؛ الطبقة العامة الولادة {عنوان السلسلة الخاصة ؛ صور سلسلة خاصة سعر مزدوج خاص ؛ خاص int num ؛ Boolean ChildCB الخاص ؛ خاص BTN BTN ؛ Private Int Pid ؛ الولادة العامة (عنوان السلسلة ، صور السلسلة ، السعر المزدوج ، int num ، boolean childcb ، Boolean BTN ، int pid) {this.title = title ؛ this.images = الصور ؛ this.price = السعر ؛ this.num = num ؛ this.childcb = childcb ؛ this.btn = btn ؛ this.pid = pid ؛ } public int getPid () {return pid ؛ } public void setPid (int pid) {this.pid = pid ؛ } boolean public ISBTN () {return btn ؛ } public void setBtn (boolean btn) {this.btn = btn ؛ } السلسلة العامة getTitle () {return title ؛ } public void settitle (tring title) {this.title = title ؛ } السلسلة العامة getImages () {return Images ؛ } public void setImages (string images) {this.images = Images ؛ } public double getPrice () {return price ؛ } public void setPrice (price double) {this.price = price ؛ } public int getNum () {return num ؛ } public void setNum (int num) {this.num = num ؛ } boolean public ISCHILDCB () {return ChildCB ؛ } public void setchildcb (boolean childcb) {this.childcb = childcb ؛ } Override public string toString () {return "champian {" + "title = '" + title +'/'' + "، Images = '" +'/'' + "، price =" + price + "، num =" + num + "، childcb =" + childcb + "، btn =" + btn + "، pid =". }}4. واجهة
1. apiservice
حزمة com.bwei.gepeng.http ؛ استيراد com.bwei.gepeng.entity.cartbean ؛ استيراد com.bwei.gepeng.entity.goodsshowbean ؛ استيراد com.bwei.gepeng.entity.messagebean ؛ استيراد java.util.list ؛ استيراد java.util.map ؛ استيراد io.reactivex.flowable ؛ استيراد Retrieve2.http.get ؛ استيراد Retrieve2.http.querymap ؛ الواجهة العامة Apiservice {// تفاصيل المنتج Query 75 //http://120.27.23.105/product/getProductDetail؟pid=75&Source=Androidget ("Product/getProductDetail") Flowable <SEEDSHOWBEAN >> getNews ( // استعلام عربة التسوق // http: //120.27.23.105/product/getcarts؟ uid = 3802 & source = Androidget ("Product/getCarts") يمكن تدفقه <list <list <CartBean>>> getCart (QueryMap Map <String ، String> map) ؛ // حذف عربة التسوق // http: //120.27.23.105/product/getcarts؟ uid = 3802 & source = Androidget ("Product/deletecart") Flowable <list <list <Cartbean>> getDel (QueryMap Map <String ، String> map) ؛ // إضافة عربة التسوق // http: //120.27.23.105/product/addcart؟ uid = 3802 & pid = 75 & source = androidget ("product/addcart") flowable <list <list <cartbean >>> getAdd (QueryMap Map ، string> map) ؛ } 2.iview [java] عرض واجهة copypublic plain iview {void onSuccess (Object o ، tag string) ؛ void onFailed (استثناء E ، علامة السلسلة) ؛ } 3.IpResEnter [java] عرض copyimport java.util.map ؛ الواجهة العامة ipresenter {void getData (Map <String ، String> Map ، tag tag) ؛ } 4.Imodel [java] عرض copyimport java.util.map ؛ الواجهة العامة imodel {void getData (خريطة <string ، string> map ، tag string) ؛ }5. الكود
1. عرض مخصص AddDeleview
حزمة com.bwei.gepeng.myview ؛ استيراد Android.content.context ؛ استيراد Android.content.res.typedarray ؛ استيراد Android.Graphics.Color ؛ استيراد Android.Util.attributeset ؛ استيراد Android.view.view ؛ استيراد Android.widget.edittext ؛ استيراد Android.Widget.LineArlayout ؛ استيراد Android.widget.textView ؛ استيراد com.bwei.gepeng.r ؛ الطبقة العامة adddeleview يمتد linearlayout {private onadddelclicklistener مستمع ؛ edittext eTnumber الخاص ؛ // قم بتوفير واجهة Click Callback للاستخدام الخارجي للواجهة العامة OnAddLclickListener {void onaddclick (view v) ؛ void ondelclick (view v) ؛ } public void setOnaddLclickListener (onadddelclickListener beasher) {if (المستمع! = null) {this.listener = beasher ؛ }} AddDeleview العامة (سياق السياق) {this (context ، null) ؛ } AddDeleview العامة (سياق السياق ، attributeset attrs) {this (context ، attrs ، 0) ؛ } AddDeleview العامة (سياق السياق ، attributeset attrs ، int defstyleattr) {super (context ، attrs ، defstyleattr) ؛ Initview (السياق ، attrs ، defstyleattr) ؛ } private void initview (سياق السياق ، attributeset attrs ، int defstyleattr) {view.inflate (context ، r.layout.layout_add_delete ، this) ؛ // احصل على TextView TxtDelete = findViewById (r.id.txt_delete) ؛ TextView txtadd = findViewById (r.id.txt_add) ؛ etnumber = findViewById (r.id.et_number) ؛ typedarray typedArray = context.ObtainStyledattributes (attrs ، r.stylable.adddedeleviewstyle) ؛ String LeftText = typedArray.getString (R.StyLable.addDedeleviewStyle_Left_Text) ؛ string rightText = typedArray.getString (R.StyLable.adddedeleviewstyle_right_text) ؛ String middletext = typedArray.getString (R.StyLable.adddedeleviewstyle_middle_text) ؛ int color = typedArray.getColor (R.StyLable.adddedeviewstyle_left_text_color ، color.red) ؛ txtdelete.settext (LeftText) ؛ txtadd.settext (rightText) ؛ etnumber.settext (middletext) ؛ txtdelete.settextColor (color) ؛ // recycled typedArray.ReCycle () ؛ txtDelete.setonClickListener (جديد onClickListener () {Override public void onClick (عرض العرض) {leader.ondelclick (view) ؛}}) ؛ txtadd.setonClickListener (new onClickListener () {Override public void onClick (view view) {leader.onaddclick (view) ؛}}) ؛ } // توفير طريقة خارجية لتعديل الأرقام public void setNumber (int number) {if (number> 0) {etnumber.settext (number+"") ؛ }} // توفير طريقة خارجية للحصول على الرقم الحالي public getNumber () {string string = etnumber.getText (). toString () ؛ int i = integer.parseint (سلسلة) ؛ العودة أنا. }} 2. التحديثية فئة أدوات التحديثية
حزمة com.bwei.gepeng.http ؛ استيراد java.io.ioException ؛ استيراد OKHTTP3.HTTPURL ؛ استيراد OKHTTP3.Interceptor ؛ استيراد OKHTTP3.OKHTTPCLIENT ؛ استيراد OKHTTP3.Request ؛ استيراد OKHTTP3.Response ؛ استيراد استرداد 2.Retrofit ؛ استيراد Retrieve2.Adapter.rxjava2.rxJava2CalladapterFactory ؛ استيراد Retrieve2.Converter.gson.gsonConverterFactory ؛ الفئة العامة retrofiTutils {مثيل private static proledile retrofiTutils ؛ التحديثية النهائية الخاصة النهائية ؛ retrofiTUtIls () {okhttpclient client = new OKHTTPCLIENT.BUILDER (). addInterceptor (new logger ()). build () ؛ retrofit = جديد retrofit.builder (). العميل (العميل) .addCallAdapterFactory (rxjava2calladapterfactory.create () .addConverterFactory (gsonconverterfactory.create ()) .baseurl ("http://120.27.23.105/" } retrofiTUtUtIls ثابتة عامة getInstance () {if (مثيل == null) {synchronized (retrofitUtils.class) {if (exate == null) {exate = new retrofitutils () ؛ }}} مثيل الإرجاع ؛ } Apiservice getApiservice () {Apiservice Apiservice = retrofit.create (Apiservice.class) ؛ إرجاع Apiservice. } تنفذ مسجل الفئة اعتراض {Override Public Response (سلسلة السلسلة) يلقي ioException {request Original = chain.request () ؛ httpurl url = Original.url (). newbuilder () .addqueryparameter ("source" ، "Android") .build () ؛ // إضافة طلب طلب طلب طلب = Original.newbuilder () .rl (url) .build () ؛ عودة سلسلة. proceed (طلب) ؛ }}} 3.M طبقة
حزمة com.bwei.gepeng.model ؛ استيراد com.bwei.gepeng.entity.cartbean ؛ استيراد com.bwei.gepeng.entity.goodsshowbean ؛ استيراد com.bwei.gepeng.entity.messagebean ؛ استيراد com.bwei.gepeng.http.retrofitutils ؛ استيراد com.bwei.gepeng.presenter.newspresenter ؛ استيراد java.util.list ؛ استيراد java.util.map ؛ استيراد io.reactivex.flowable ؛ نموذج الطبقة العامة ينفذ Imodel {Private NewspreSenter Proviseer ؛ النموذج العام (مقدم الأخبار) {this.presenter = مقدم ؛ } Override public void getData (map <string ، string> map ، tag string) {if (tag.equals ("cart")) {flowable <messageBean <list <cartbean >>> flowable = retrofitutils.getInstance (). getApiservice (). getCart (map) ؛ Proxer.get2 (قابل للتدفق ، علامة) ؛ } آخر إذا (tag.equals ("البضائع"))) مقدم. } آخر إذا (tag.equals ("del")) {flowable <messageBean <list <cartbean >>> flowable = retrofitutils.getInstance (). getApiservice (). getDel (map) ؛ Proxer.get3 (قابل للتدفق ، علامة) ؛ } آخر إذا (tag.equals ("add")) {flowable <messageBean <list <cartbean >>> flowable = retrofitutils.getInstance (). getApiservice (). getAdd (map) ؛ Proxer.get4 (Flowable ، Tag) ؛ }}} 4.P طبقة
حزمة com.bwei.gepeng.presenter ؛ استيراد com.bwei.gepeng.entity.cartbean ؛ استيراد com.bwei.gepeng.entity.goodsshowbean ؛ استيراد com.bwei.gepeng.entity.messagebean ؛ استيراد com.bwei.gepeng.model.model ؛ استيراد com.bwei.gepeng.view.iview ؛ استيراد java.util.list ؛ استيراد java.util.map ؛ استيراد io.reactivex.flowable ؛ استيراد io.reactivex.android.schedulers.androidsulers ؛ استيراد io.reactivex.schedulers.schedulers ؛ استيراد io.reactivex.subscribers.disposablesUbscriber ؛ تنفذ Public Class Preversenter ipresenter {private iview iview ؛ DisposablesUbsubscriber <messageBean <EmberShowbean >> المشترك ؛ dispoSablesUBSistriber <messageBean <list <Cartbean >>> المشترك 2 ؛ dispoSablesUBSistriber <messageBean <list <Cartbean >>> CONSICRIPR3 ؛ dispoSablesUBSirosber <messageBean <list <Cartbean >>> المشترك 4 ؛ public void anclesview (iview iview) {this.iview = iview ؛ } Override public void getData (خريطة <string ، string> map ، tag string) {model = new model (this) ؛ model.getData (MAP ، TAG) ؛ } public void detachview () {if (iview! = null) {iview = null ؛ } if (المشترك! = null) {if (! cumpriper.isDisposed ()) {cumpriber.dispose () ؛ }} if (مشترك 2 = null) {if (! cumpriver2.isDisposed ()) {cumpriber2.dispose () ؛ }} if (المشترك 3! = null) {if (! cumpriber3.isDisposed ()) {cumpriber3.dispose () ؛ }} if (المشترك 4! = null) {if (! cumprivers4 }}}} // استعلام عربة التسوق ، الحصول على void public get (flowbean <goodsshowbean >> قابلة للتدفق ، علامة السلسلة النهائية) {المشترك = flowable.subscribeon (Schedulers.io ()) .Observeon (androidschedulers.mainthread () public void onnext (messageBean <EvelyShowbean> listMessageBean) {if (listmessagebean! Override public void onComplete () {}}) ؛ } // Query Product Details75 public void get2 (flowBean <list <cartbean >>> flow ، tag final tag) {cumpriber2 = flowable.subscribeon (Schedulers.io () Override public void onnext (MessageBean <cartbean >>> {if (list! = null) {list <Cartbean> data = listdata () ؛ } Override public void onComplete () {}}) ؛ }. public void onnext (MessageBean <cartbean >> {if (list! }. void onnext (MessageBean <cartbean >> {if (list! = null) {string code = listmsg () ؛ }} 5. صفحة تفاصيل منتج النشاط الرئيسي
حزمة com.bwei.gepeng.view ؛ استيراد Android.content.intent ؛ استيراد Android.os.bundle ؛ استيراد Android.support.v7.app.appcompatactivity ؛ استيراد Android.view.view ؛ استيراد Android.widget.textView ؛ استيراد Android.widget.toast ؛ استيراد com.bwei.gepeng.r ؛ استيراد com.bwei.gepeng.entity.goodsshowbean ؛ استيراد com.bwei.gepeng.presenter.newspresenter ؛ استيراد com.facebook.drawee.view.simpledRaweeView ؛ استيراد java.util.hashmap ؛ استيراد java.util.map ؛ استيراد butterknife.bindview ؛ استيراد butterknife.butterknife ؛ استيراد butterknife.onclick ؛ يمتد الفئة العامة MainActivity AppCompatActivity الأدوات iview {bindview ( bindview (r.id.goods_title) TextView GoodStitle ؛ BINDVIEW ( مقدم الصحف الخاص ؛ Override محمية void onCreate (backdle SaveInstancestate) {super.oncreate (SaveInstancestate) ؛ setContentView (r.layout.activity_main) ؛ butterknife.bind (هذا) ؛ مقدم = NewpspreSenter () ؛ Proxers.Antachview (هذا) ؛ //http://120.27.23.105/product/getProductDetail؟pid=75&Source=Android Map <String ، String> map = new HashMap <> () ؛ map.put ("pid" ، "75") ؛ PROMENTER.GETDATA (خريطة ، "البضائع") ؛ } Override public void onsuccess (object o ، tag string) {if (tag.equals ("geter")) {if (o! = null) {goodshowbean data = (goodshowbean) o ؛ //log.e("gp "،" onSuccess: " + data.toString ()) ؛ myimageView.setImageuri (data.getImages (). split ("// |") [0]) ؛ goodstitle.settext (data.getTitle ()) ؛ GoodSprice.settext ("¥"+data.getPrice ()) ؛ }} آخر if (tag.equals ("add")) {if (o! = null) {string msg = (string) o ؛ Toast.Maketext (MainActivity.This ، msg ، toast.length_short) .show () ؛ }}} Override public void onFailed (استثناء e ، علامة السلسلة) {} onclick ({r.id.btn_addCart ، map.put ("uid" ، "3802") ؛ map.put ("pid" ، "75") ؛ PROMENTER.GETDATA (MAP ، "ADD") ؛ //toast.maketext(mainActivity.Tis ،"add بنجاح "، toast.length_short) .show () ؛ استراحة؛ CASE R.ID.BTN_SHOPPING: NEWENT NEW = NEW NEUT (MAINACTIVAL.TH ، Main2Activity.class) ؛ البدء (نية) ؛ استراحة؛ }}} 6. محول القائمة الثانوية expressableadapter
حزمة com.bwei.gepeng.adapter ؛ استيراد Android.content.context ؛ استيراد Android.view.view ؛ استيراد Android.View.viewGroup ؛ استيراد Android.widget.baseexpandableListAdapter ؛ استيراد Android.widget.button ؛ استيراد Android.widget.checkbox ؛ استيراد Android.widget.textView ؛ استيراد Android.widget.toast ؛ استيراد com.bwei.gepeng.r ؛ استيراد com.bwei.gepeng.entity.childbean ؛ استيراد com.bwei.gepeng.entity.groupbean ؛ استيراد com.bwei.gepeng.myview.adddedeleview ؛ استيراد com.bwei.gepeng.view.main2Activity ؛ استيراد com.facebook.drawee.view.simpledRaweeView ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ public class ExpandableAdapter extends BaseExpandableListAdapter { private Context context; private List<GroupBean> groupBeen=new ArrayList<>(); private List<List<ChildBean>> childBeen=new ArrayList<>(); private Main2Activity main; public ExpandableAdapter(Context context, List<GroupBean> groupBeen, List<List<ChildBean>> childBeen) { this.context = context; this.groupBeen = groupBeen; this.childBeen = childBeen; this.main = (Main2Activity) context; } //Interface callback private onDeleteGoods onDleGoods; public interface onDeleteGoods{ void onDelGoods(int i,int i1,String pid); } public void setOnDeleteGoods(onDeleteGoods onDleGoods){ this.onDleGoods=onDleGoods; } @Override public int getGroupCount() { return groupBeen.size(); } @Override public int getChildrenCount(int i) { return childBeen.get(i).size(); } @Override public Object getGroup(int i) { return groupBeen.get(i).getSellerName(); } @Override public Object getChild(int i, int i1) { return childBeen.get(i).get(i1).getTitle(); } @Override public long getGroupId(int i) { return i; } @Override public long getChildId(int i, int i1) { return i1; } @Override public boolean hasStableIds() { return false; } //Level 1 group @Override public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) { //Load view view=View.inflate(context, R.layout.ex_group_item ,null); final CheckBox groupCb= view.findViewById(R.id.group_checkbox); TextView shopName= view.findViewById(R.id.shop_name); shopName.setText(groupBeen.get(i).getSellerName()); groupCb.setChecked(groupBeen.get(i).isGropuCb()); //Group check button groupCb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean gchecked = groupCb.isChecked(); groupBeen.get(i).setGropuCb(gchecked); //Main2Activity main= (Main2Activity) context; for(GroupBean i: groupBeen){ boolean groupCb = i.isGropuCb(); if(!groupCb){ main.allCheckbox.setChecked(false); break; }else{ main.allCheckbox.setChecked(true); } } int size = childBeen.get(i).size(); if(gchecked){ for(int r=0;r<size;r++){ //Toast.makeText(context,"group button"+gchecked+""+size, Toast.LENGTH_SHORT).show(); childBeen.get(i).get(r).setChildCb(true); } }else{ for(int r=0;r<size;r++){ //Toast.makeText(context,"group button"+gchecked+""+size, Toast.LENGTH_SHORT).show(); childBeen.get(i).get(r).setChildCb(false); } } notifyDataSetChanged(); main.changesum(childBeen); } }); return view; } //Second-level group @Override public View getChildView(final int i, final int i1, boolean b, View v, ViewGroup viewGroup) { //Load view v=View.inflate(context, R.layout.ex_child_item ,null); final CheckBox childCb = v.findViewById(R.id.child_checkbox); TextView shopTitle= v.findViewById(R.id.shop_title); TextView shopPrice= v.findViewById(R.id.shop_price); //ImageView shopImg=v.findViewById(R.id.shop_img); //draweeView.setImageURI(uri); SimpleDraweeView shopImg = v.findViewById(R.id.shop_img); final AddDeleteView adv = v.findViewById(R.id.adv); Button shop_delete=v.findViewById(R.id.shop_delete); childCb.setChecked(childBeen.get(i).get(i1).isChildCb()); String images = childBeen.get(i).get(i1).getImages(); //Glide.with(context).load(images).into(shopImg); shopImg.setImageURI(images); shopTitle.setText(childBeen.get(i).get(i1).getTitle()); shopPrice.setText(childBeen.get(i).get(i1).getPrice()+""); adv.setNumber(childBeen.get(i).get(i1).getNum()); //final Main2Activity main= (Main2Activity) context; //Control the visible and hidden if(childBeen.get(i).get(i1).isBtn()){ shop_delete.setVisibility(View.VISIBLE); }else{ shop_delete.setVisability(View.INVISIBLE); } //Delete button listening shop_delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onDleGoods.onDelGoods(i,i1,childBeen.get(i).get(i1).getPid()+""); } }); //AddDelClickListener(new AddDeleteView.OnAddDelClickListener() { @Override public void onAddClick(View v) { int number = adv.getNumber(); number++; adv.setNumber(number); childBeen.get(i).get(i1).setNum(number); main.changesum(childBeen); } @Override public void onDelClick(View v) { int number = adv.getNumber(); if(number==1){ Toast.makeText(context,"The minimum number of users is 1",Toast.LENGTH_SHORT).show(); } number--; adv.setNumber(number); childBeen.get(i).get(i1).setNum(number); main.changesum(childBeen); } }); //Checkbox of secondary group listen childCb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean flag=false; boolean cchecked = childCb.isChecked(); childBeen.get(i).get(i1).setChildCb(cchecked); //Toast.makeText(context,"child button"+cchecked+""+i1, Toast.LENGTH_SHORT).show(); // Main2Activity main= (Main2Activity) context; for (List<ChildBean> i1:childBeen){ for(int r=0;r<i1.size();r++) { boolean childCb1 = i1.get(r).isChildCb(); if(!childCb1){ main.allCheckbox.setChecked(false); groupBeen.get(i).setGropuCb(false); flag=true; break; }else{ main.allCheckbox.setChecked(true); groupBeen.get(i).setGropuCb(true); } } if(flag){ break; } } int size = childBeen.get(i).size(); for(int x=0;x<size;x++) { boolean childCb1 = childBeen.get(i).get(x).isChildCb(); if(!childCb1){ groupBeen.get(i).setGropuCb(false); break; }else{ groupBeen.get(i).setGropuCb(true); } } notifyDataSetChanged(); main.changesum(childBeen); } }); return v; } @Override public boolean isChildSelectable(int i, int i1) { return false; }} 7.购物车页面逻辑Main2Activity
package com.bwei.gepeng.view; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.CheckBox; import android.widget.ExpandableListView; import android.widget.TextView; import com.bwei.gepeng.R; import com.bwei.gepeng.adapter.ExpandableAdapter; import com.bwei.gepeng.entity.CartBean; import com.bwei.gepeng.entity.ChildBean; import com.bwei.gepeng.entity.GroupBean; import com.bwei.gepeng.presenter.NewsPresenter; import java.util.ArrayList; import java.util.HashMap; استيراد java.util.list ؛ استيراد java.util.map ؛ import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class Main2Activity extends AppCompatActivity implements IView { @BindView(R.id.exListView) ExpandableListView exListView; @BindView(R.id.all_chekbox) public CheckBox allCheckbox; @BindView(R.id.total_price) TextView totalPrice; @BindView(R.id.total_number) TextView totalnumber; @BindView(R.id.tv_go_to_pay) TextView tvGoToPay; @BindView(R.id.tv_go_to_del) TextView tvGoToDel; private ExpandableAdapter expandableAdapter; private boolean flagdel = true; private boolean flagdel = false; private NewsPresenter presenter; List<GroupBean> groupBeen = new ArrayList<>(); List<List<ChildBean>> childBeen = new ArrayList<>(); int i; int i1; Override محمية void onCreate (backdle SaveInstancestate) {super.oncreate (SaveInstancestate) ؛ setContentView(R.layout.activity_main2); ButterKnife.bind(this); //Get the secondary list adapter expandableAdapter = new ExpandableAdapter(Main2Activity.this, groupBeen, childBeen); exListView.setAdapter(expandableAdapter); exListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) { return true; } }); presenter = new NewsPresenter(); presenter.attachView(this); //http://120.27.23.105/product/getCarts?uid=3802&source=android Map<String, String> map = new HashMap<>(); map.put("uid", "3802"); presenter.getData(map, "cart"); expandableAdapter.setOnDeleteGoods(new ExpandableAdapter.onDeleteGoods() { @Override public void onDelGoods(int i, int i1, String pid) { Main2Activity.this.i = i; Main2Activity.this.i1 = i1; Map<String, String> map = new HashMap<>(); map.put("uid", "3802"); map.put("pid", pid); presenter.getData(map, "del"); } }); } @Override public void OnSuccess(Object o, String tag) { if (tag.equals("cart")) { if (o != null) { List<CartBean> data = (List<CartBean>) o; for (CartBean i : data) { GroupBean groupBean = new GroupBean(i.getSellerName(), false); this.groupBeen.add(groupBean); List<CartBean.ListBean> list = i.getList(); List<ChildBean> ls = new ArrayList<>(); for (CartBean.ListBean w : list) { String[] split = w.getImages().split("//|"); ChildBean childBean = new ChildBean(w.getTitle(), split[0], w.getPrice(), 1, false, false, w.getPid()); ls.add(childBean); } this.childBeen.add(ls); } for (int i = 0; i < expandableAdapter.getGroupCount(); i++) { exListView.expandGroup(i); } } } else if (tag.equals("del")) { if (o != null) { String msg = (String) o; if (this.i != -1 && this.i1 != -1) { int size = childBeen.get(i).size(); if (size == 1) { childBeen.remove(i); groupBeen.remove(i); } else { childBeen.get(i).remove(i1); } changesum(childBeen); this.i = -1; this.i1 = -1; if(flagdel){ delGoods(); } } } } } } expandableAdapter.notifyDataSetChanged(); } @Override public void OnFailed(Exception e, String tag) { } @OnClick({R.id.back, R.id.edit, R.id.all_chekbox,R.id.tv_go_to_del}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.back: finish(); استراحة؛ case R.id.edit: if(flagedit){ tvGoToPay.setVisability(View.GONE); tvGoToDel.setVisability(View.VISIBLE); }else{ tvGoToPay.setVisability(View.VISIBLE); tvGoToDel.setVisability(View.GONE); } for (List<ChildBean> i1 : childBeen) { for (int r = 0; r < i1.size(); r++) { i1.get(r).setBtn(flagedit); } } flagedit = !flagedit; expandableAdapter.notifyDataSetChanged(); استراحة؛ case R.id.all_chekbox: boolean checked = allCheckbox.isChecked(); //Change the first-level item check box for (GroupBean i : groupBeen) { i.setGropuCb(checked); } //Change the second-level item check box for (List<ChildBean> i1 : childBeen) { for (int r = 0; r < i1.size(); r++) { i1.get(r).setChildCb(checked); } } expandableAdapter.notifyDataSetChanged(); changesum(childBeen); استراحة؛ case R.id.tv_go_to_del: if(childBeen.size()!=0){ for (List<ChildBean> i1 : childBeen) { for (int r = 0; r < i1.size(); r++) { boolean childCb1 = i1.get(r).isChildCb(); if (childCb1) { flagdel=true; delGoods(); if(allCheckbox.isChecked()){ allCheckbox.setChecked(false); } استراحة؛ } } if(flagdel){ break; } } } //Toast.makeText(Main2Activity.this,flagdel+"",Toast.LENGTH_SHORT).show(); استراحة؛ } } //Recursively delete private void delGoods(){ Boolean flag=false; for(int p=0;p<childBeen.size();p++) { for (int r = 0; r < childBeen.get(p).size(); r++) { boolean childCb1 = childBeen.get(p).get(r).isChildCb(); if(p==childBeen.size()-1&&r==childBeen.get(p).size()-1){ flagdel=false; } if (childCb1) { int pid = childBeen.get(p).get(r).getPid(); this.i = p; this.i1 = r; الخريطة <string ، string> map = new HashMap <> () ؛ map.put("uid", "3802"); map.put("pid", pid+""); presenter.getData(map, "del"); flag=!flag; استراحة؛ } } if(flag){ break; } } } //Total price of calculation and quantity public void changesum(List<List<ChildBean>> childBeen) { int count = 0; double sum = 0; for (List<ChildBean> i1 : childBeen) { for (int r = 0; r < i1.size(); r++) { boolean childCb1 = i1.get(r).isChildCb(); if (childCb1) { double price = i1.get(r).getPrice(); int num = i1.get(r).getNum(); sum += price * num; count++; } } } totalPrice.setText("¥" + sum); totalnumber.setText("Total products:" + count + "piece"); }}6.附
shape图edit
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#FFFFFF" /> <!--<corners android:radius="3dip"/>--> <stroke android:width="1dip" android:color="#BDC7D8" /> </shape>
Application 初始化Fresco
import android.app.Application; import com.facebook.drawee.backends.pipeline.Fresco; public class App extends Application{ @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.