Artikel ini berbagi kode spesifik keranjang belanja implementasi retrofit RXJAVA untuk referensi semua orang. Konten spesifiknya adalah sebagai berikut
Gambar reproduksi:
1. Ketergantungan
AnnotationProcessor 'com.jakewharton: butterknife-compiler: 8.8.1' compile 'com.jakewharton: butterknife: 8.8.1' compile 'com.android.support:recyclerview-V7:26.0.0-alpha1' compile 'com.squareup.retrofrofrofit 'com.squareup.retrofit2: converter-gson: 2.3.0' compile 'com.facebook.fresco: fresco: 0.12.0' compile 'com.facebook.fresco: animasi-base-support: 0.12.0' compile 'com.faceBook.fresco: animated-webp: 0.12.0' compile 'com.faceBook.fresco: animated-webp: 0.12. 'com.facebook.fresco: animated-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: 2.1.7' compile 'Com.squareup.retrofit2: Adapter 'io.reactivex.rxjava2: rxandroid: 2.0.1' compile 'com.squareup.okhttp3: okhttp: 3.9.0' compile 'com.google.code.gson: gson: 2.8.1'
2. Tata letak
1. Tata letak tambahan tata letak_add_delete
<? 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_PARENTE =" dan orientasi: " Android: weightsum = "1"> <textView android: id = "@+id/txt_delete" android: layout_width = "30dp" android: layout_height = "30dp" android: "deduction" android: gravity = "center" android: latar belakang = "#8b941B"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Android: layout_margintop = "2dp" android: layout_width = "50dp" android: layout_height = "30dp" android: latar belakang = "@@drawable/edit" android: tata letak_weight = "0.00" Android: "center" android: Text = "1" Android: layout_width = "30dp" Android: layout_height = "30dp" android: text = "plus" android: gravity = "center" android: latar belakang = "#8b948b"/> </ linearlayout>
2. Detail Produk Tata Letak Activity_main
<? Xml Version = "1.0" encoding = "UTF-8"?> <Relativelayout xmlns: android = "http://schemas.android.com/apk/res/android" xmlns: fresco = "http://schemas.android.com" parresco = "http://schemas.android.com =parpker = parparo" dan layoid: http:/schemas.android.com/aproid =paro =paro = Android: layout_height = "match_parent"> <linearlayout android: layout_width = "match_parent" android: layout_height = "match_parent" android: orientation = "vertikal"> <com.facebook.drawee.view.simpledraweeview: id = "@Facebook.drawee.view.simpledraweeview: id =" @Facebook.drawee.view.SimpledRaweeview: id = "@" " Android: layout_width = "match_parent" android: layout_height = "450dp" fresco: placeholderimage = "@mipmap/ic_launcher"/> <textView android: id = "@+id/goods_title" android: layout_width = "wrap_content"@+goods_title " Android: layout_margin = "10dp" android: text = "aahhh itu milikmu" android: textsize = "20dp" /> <textView android: id = "@+id /goods_price" android: layout_width = "wrap_content" android: tata letak_height = "wrap_content =" dan lay -content: layout_poid: layout = layout_height = "wrap_content =" wrape- " Android: Text = "¥ 18132" Android: TextColor = "#dc5f2e" Android: TextSize = "18DP" /> <TextView Android: Layout_width = "Wrap_content" Android: Layout_Height = "Wrap_content" Android: Layout_margin = "10dpmin =" 10dpchant = "iA" AMPLOD "AMPLOD" AM PLACTEN "AM: TEXTON" AMPLOD "AM: TEXTON" IM: " Android: TextSize = "16dp"/> </ linearlayout> <linearlayout: layout_alignparentbottom = "true" android: layout_width = "match_parent" android: layout_height = "50dp" orientasi/orientasi = "horizontal"> <kancing: "Id ="@"orientasi =" horizontal "> <" Id = "Id =" Id = "Id =" ID: "Horizontal"> Android: Layout_weight = "1" Android: layout_width = "0dp" Android: layout_height = "match_parent" android: latar belakang = "#ffc207" android: text = "Tambahkan ke keranjang belanja"/> <Tombol Android = "@+id/btn_shopping" android: "Layout:" Layout: "1"@+id/btn_shopping "Android:" Layout: "@+ID/btn_shopping" Android: " android: layout_height = "match_parent" android: latar belakang = "#ff6b06" android: text = "buy now"/> </ linearlayout> </relativelayout>
3. Tata letak keranjang belanja Activity_main2
<? Xml Version = "1.0" encoding = "UTF-8"?> <linearlayout xmlns: android = "http://schemas.android.com/apk/res/android" android: layout_width = "match_parent" android: tata letak_height = "layout_width =" oriale- dan ori orientasi: tata letak: tata letak_height = "parko-" <Linearlayout android: id = "@+id/top_bar" android: layout_width = "match_parent" android: layout_height = "48dp" android: background = "#f7f7f7" orient: orientasi = "vertikal"> <relativelayout outg: tata letak_width = "orientasi =" vertikal "> <relativelayout: tata letak: tata letak_widen =" vertical "> Android: latar belakang = "@android: warna/transparan" android: orientasi = "vertikal"> <imageview android: id = "@+id/back" android: layout_width = "48dp" android: layout_height = "48dp" Android: Layout_alignParentleft = "android: lay: Lay-" cedroid = layout_alignPareFTLEFT = "true" " Android: padding = "12dp" android: src = "@drawable /back" /> <textView android: layout_width = "match_parent" android: layout_height = "wrap_content" android "cartco (gravity =" android: MinHeight = "48dp" android = "Text =" CARTOL "PUSPOL: MINHEIGHT =" 48DP "dan TEKS: TEKPROID =" TEKP = "TEKPREOD =" TEKR "PUSPOL:" 48DP "TEKR" TEKROP = "48DP" TEKPROID "TEKPROID =" 48DP " Android: TextSize = "16sp" /> <textView android: id = "@+id /edit" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: layout_alignparpar = "true" android: tata letak_marginright = "40dright =" 40D "android =" true "android: tata letak_marginright =" 40D "40D" dan "true": "40droid =" 40droid = "true" android = "40droid =" tright "android =" 40droid = "tright" android: "tright" android: "tright" android: layout = "40droid =" tright "android:" tright "android:" tright "android: layout = layout =" tata letak = " Android: MinHeight = "48DP" Android: Text = "Edit" Android: TextColor = "#1A1A1A" Android: TextSize = "14SP" Android: Visibilitas = "Visible"/> </relativelayout> </liniearlayout> <ExpandableListView dan ID: id = "@+"@+" Android: layout_width = "match_parent" android: layout_height = "0dp" android: layout_weight = "1" android: childIndicator = "@null" android: groupIndicator = "@null"> </pandableListView> <linearlayout outg: tata letak: "null"> </expandableListView> <linearlayout: tata letak: layout_width = "DPARED: "LAYOD:" LAYODEP: "LAYOUD:" LAYOUD: "LAYOUD:" NULL "" LAYOUD: "LAYOUD:" LAYOUD: "LAYOUD:" android: gravity = "center_vertical" android: orientation = "horizontal"> <centang Android: id = "@+id /all_chekbox" android: layout_marginleft = "20dp" android: layout_width = "wrap_content" android: tata letak_height = "wrap_content" <prape /Textview "<prapeT" Android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "pilih all"/> <linearlayout android: id = "@+id/ll_info" liproid: Layout_width = "0dp" android: tata letak_height "" linoT = "lip =" Layout_croid = "0DP" Android: layout_width = "match_parent" android: layout_height = "wrap_content" android: orientasi = "vertikal" android: layout_marginright = "20dp" android: layout_weight = "1"> <linearlayout: layout_width = "match_weight" android: orientasi = "horisontal" android: gravity = "right"> <textView android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: tata letak_marginleft = "5dp" android: text = "Total:" android: "TextSize =" 18SP "Android" Text = "Total:" Android: "TextSize =" 18SP "Android" Text = "dan TextSize =" 18SLEFT = "5DP" Android: id = "@+id/total_price" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "¥ 0,00" android: textcolor = "#f23232" android: textsize = "16sp" <textview = "f23232" Android: id = "@+id/total_number" android: layout_width = "match_parent" android: layout_height = "wrap_content" android: text = "Total Produk: 0 Pieces" Android: Gravity = "Right" Android: TextSize = "16Sp" Android: TextStyle = "Bold"/</TextSize = "16Sp" Android: TextStyle = "Bold"/</lin> </liner> </liner> </liner> </liner-> </lin> </lin> </liner/</lin> </lin> </lin> </lin> </lin> </lin> </lin> </lin> </lin> android:id="@+id/tv_go_to_pay" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="3" 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_width = "match_parent" android: layout_height = "match_parent" android: tata letak_weight = "3" android: latar belakang = "#e2231c" dan centroid: dan centroid: "dan gravitas: dan gravitas:" dan center "#" dan center "dan center:" dan centroid: "dan latar belakang:" android: textColor = "#fafafa" android: visibilitas = "go"/> </learearlayout> </learearlayout> </learearlayout>
4. Daftar Sekunder Tata letak tingkat grup ex_group_item
<? Xml Version = "1.0" encoding = "UTF-8"?> <linearlayout xmlns: android = "http://schemas.android.com/apk/res/android" android: layout_width = "match_parent" android: tata letak_height = "parkir_pcoR"#"dan latar belakang"#"" android: orientasi = "horizontal"> <centang Android: id = "@+id/group_checkbox" android: layout_marginleft = "20dp" android: layout_width = "wrap_content" Android: tata letak_height = "wrap_content" android: focusable = "false"/false/false/false/text = "wrap_content" dan focusable = "false"/false/false. android: layout_marginleft = "20dp" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: textsize = "16dp" /> </ linearlayout>
5. Sub-le-Layout Daftar Sekunder Ex_child_item
<? Xml Version = "1.0" encoding = "UTF-8"?> <linearlayout xmlns: android = "http://schemas.android.com/apk/res/android" xmlns: app = "http://schemas.android.com/apkk/resk/resk/nuto" xmlns: fresco = "http://schemas.android.com/apk/res-auto" android: layout_width = "match_parent" android: layout_height = "230dp" android: orientation = "horisontal"> <centang dan centang dan centang: id = "@+@+croid: orientasi = horisontal"> android: layout_marginleft = "20dp" android: layout_marginbottom = "50dp" android: layout_width = "wrap_content" android: layout_height = "wrap_content" /> <relativelayout: layout_marginleft = "20dp" Android: layout_height = "match_parent"> <textview android: id = "@+id/shop_title" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: tata letak_alignparef = "true" android: layout_alhent "android =" layout_lignpareFing = "true" android: layout_alhent "android: layout =onignparentleft =" true "android: layout_alhent" android: layout = "AnlignPareFT = "true" android: layout_alhent "android: layout = "AnlignPareft =" true "android: layout_alhent" android = "" "yrueTEnt" Android: layout_marginleft = "17dp" android: layout_marginstart = "17dp" android: text = "textView" android: layout_alignparenttop = "true" /> <!-<imageview (Imageview: ID = "@+id /shop_img" android: tata letak_width = "90 doidped: layout ="@+id /shop_img "android: layout_width =" 90 Android: layout_margintop = "30dp" Aplikasi: srccompat = "@mipmap/ic_launcher" android: layout_below = "@+id/shop_name" android: layout_alignparentleft = "true" android: layout_alignparEntStart = "true"/-> <droid. android:id="@+id/shop_img" 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_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:id="@+id/shop_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/shop_img" Android: layout_centerhorizontal = "true" android: layout_margintop = "10dp" android: text = "¥ 20" android: textColor = "#f23232"/> <com.bwe.gepeng.myview.adddeleteView android: id = "@+@+@+@+@+@+@+@+@+@+@+@+@+" android: layout_height = "30dp" android: layout_below = "@+id/shop_price" android: layout_margintop = "30dp" android: layout_marginleft = "140dp" App: left_text = "-" App: right_text = "+" app: middle "» "1 dan focure ="-"focure =" falex = "falex =" falex = "fialEx =" FALADEP = "FOCEBLEFT =" MIDDET = " </com.bwei.gepeng.myview.adddeleteview> <tombol android: id = "@+id/shop_delete" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: layout_alignparEnd = "trueOut_height =" wrap_content "Android: Layout_alignParEnd =" TrueUt "Android: Lay -Android: Layparent = Layout" android: layout_centervertical = "true" android: visibilitas = "tidak terlihat" android: text = "delete"/> </relativelayout> </learearlayout>
3. Kelas Entitas
1. MessageBean
paket com.bwei.gepeng.entity; PUBLIK Pesan PUBLIKBEAN <T> {Kode String Privat; data t pribadi; msg string pribadi; Penjual Penjual Pribadi; Public String getCode () {return code; } public void setCode (kode string) {this.code = kode; } public t getData () {data pengembalian; } public void setData (data T) {this.data = data; } public String getMSG () {return msg; } public void setMSG (string msg) {this.msg = msg; } Public SellerBean goteller () {penjual kembali; } public void setseller (penjual penjual) {this.seller = penjual; } Public Static Class SellerBean {/** * Deskripsi: Saya seorang pedagang 19 * Ikon: http://120.27.23.105/images/icon.png * Nama: Pedagang 19 * ProductNums: 999 * Skor: 5.0 * penjual: 19 */deskripsi string pribadi; ikon string pribadi; nama string pribadi; Produk int private int; skor ganda pribadi; Private Int Sellerid; string publik getDescription () {return description; } public void setDescription (deskripsi string) {this.description = description; } public string getIcon () {return icon; } public void seticon (ikon string) {this.icon = icon; } public string getName () {return name; } public void setName (name string) {this.name = name; } public int getProductNums () {return productNums; } public void setProductNums (int productNums) {this.productnums = ProductNums; } public double getScore () {skor return; } public void setScore (skor ganda) {this.score = skor; } public int getsellerId () {return sellerid; } public void setsellerId (int sellerid) {this.sellerid = sellerid; }}}2.Goodsshowbean
paket com.bwei.gepeng.entity; kelas publik Goodsshowbean {private double bargainprice; Private String CreateTime; detailur string pribadi; gambar string pribadi; private int itemType; private int pid; harga ganda pribadi; private int pSCID; Salesenum int pribadi; Private Int Sellerid; subhead string pribadi; judul string pribadi; Publik getBargainPrice () {return barakprice; } public void setBargainPrice (double bargainprice) {this.bargainprice = barakprice; } public string getCreateTime () {return createTime; } public void setCreateTime (String createTime) {this.createTime = createTime; } public String getDetailUrl () {return detailUrl; } public void setDetailUrl (String detailUrl) {this.detailUrl = detailUrl; } public string getImages () {return gambar; } public void setImages (gambar string) {this.images = gambar; } 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 () {harga kembali; } public void setPrice (harga ganda) {this.price = harga; } 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; } public string getSubhead () {return subhead; } public void setSubhead (string subhead) {this.subhead = subhead; } public String getTitle () {return title; } public void setTitle (string title) {this.title = title; } @Override public string toString () {return "goodsshowbean {" + "barakPrice =" + BARGAINPRICE + ", createTime = '" + createTime +'/'' ' + ", detailUrl ='" + detailURL + '/' + ", gambar = '" + "/'/',", " +", " +", " +", " +" + " +" + " +" + " + Harga = " + Harga +", pScID = " + pScID +", salesEnum = " + SalesEnum +", sellerid = " + sellerid +", subhead = '" + subhead +'/'' +", title = '" + title'/'' + '}'; }}3. Cartbean
paket com.bwei.gepeng.entity; impor java.util.list; cartbean kelas publik {private string sellerName; Private String SellerID; Daftar Pribadi <ListBean> Daftar; Public String getSellerName () {return jualname; } public void setSellerName (String SellerName) {this.sellerName = SellerName; } public String gotellerId () {return sellerId; } public void setsellerId (string sellerid) {this.sellerid = sellerid; } Daftar Publik <ListBean> getList () {daftar kembali; } public void setList (daftar <listBean> daftar) {this.list = list; } public static class listbean {private double barakprice; Private String CreateTime; detailur string pribadi; gambar string pribadi; private int num; private int pid; harga ganda pribadi; private int pSCID; int private int dipilih; Private Int Sellerid; subhead string pribadi; judul string pribadi; Publik getBargainPrice () {return barakprice; } public void setBargainPrice (double bargainprice) {this.bargainprice = barakprice; } public string getCreateTime () {return createTime; } public void setCreateTime (String createTime) {this.createTime = createTime; } public String getDetailUrl () {return detailUrl; } public void setDetailUrl (String detailUrl) {this.detailUrl = detailUrl; } public string getImages () {return gambar; } public void setImages (gambar string) {this.images = gambar; } 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 () {harga kembali; } public void setPrice (harga ganda) {this.price = harga; } public int getPscid () {return pScID; } public void setpscid (int pScID) {this.pscid = pScid; } public int getSelected () {return dipilih; } public void setSelected (int dipilih) {this.selected = dipilih; } public int getSelerId () {return sellerId; } public void setsellerId (int sellerid) {this.sellerid = sellerid; } public string getSubhead () {return subhead; } public void setSubhead (string subhead) {this.subhead = subhead; } public String getTitle () {return title; } public void setTitle (string title) {this.title = title; }} @Override Public String ToString () {return "cartbean {" + "sellerName = '" + sellerName +'/'' + ", sellerid = '" + sellerid +'/'' + ", daftar =" + daftar + '}'; }}4. Groupbean
paket com.bwei.gepeng.entity; Public Class GroupBean {Private String SellerName; GroupUCB boolean pribadi; groupbean publik (string sellerName, boolean groupUcb) {this.sellerName = sellerName; this.gropucb = groupUcb; } public String getSellerName () {return jualname; } public void setSellerName (String SellerName) {this.sellerName = SellerName; } public boolean isGropUcb () {return groupUcb; } public void setGropUcb (boolean groupUcb) {this.gropucb = groupUcb; } @Override Public String ToString () {return "GroupBean {" + "SellerName = '" + SellerName +'/'' + ", groupUcb =" + groupUcb + '}'; }}5. Childbean
paket com.bwei.gepeng.entity; Public Class Childbean {Private String Title; gambar string pribadi; harga ganda pribadi; private int num; anak boolean pribadi; Btn boolean pribadi; private int pid; Public Childbean (judul string, gambar string, harga ganda, int num, boolean childcb, boolean btn, int pid) {this.title = title; this.images = gambar; this.price = harga; 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; } public boolean isBtn () {return btn; } public void setBtn (boolean btn) {this.btn = btn; } public String getTitle () {return title; } public void setTitle (string title) {this.title = title; } public string getImages () {return gambar; } public void setImages (gambar string) {this.images = gambar; } public double getPrice () {harga kembali; } public void setPrice (harga ganda) {this.price = harga; } public int getNum () {return num; } public void setNum (int num) {this.num = num; } public boolean ischildcb () {return childcb; } public void setChildCB (boolean childcb) {this.childcb = childcb; } @Override public String toString() { return "ChildBean{" + "title='" + title + '/'' + ", images='" + images + '/'' + ", price=" + price + ", num=" + num + ", childCb=" + childCb + ", btn=" + btn + ", pid=" + pid + '}'; }}4. Antarmuka
1.Apiservice
paket com.bwei.gepeng.http; impor com.bwei.gepeng.entity.cartbean; impor com.bwei.gepeng.entity.goodsshowbean; impor com.bwei.gepeng.entity.messageBean; impor java.util.list; impor java.util.map; impor io.reactivex.flowable; impor retrieve2.http.get; impor retrieve2.http.querymap; APISERVICE INTERFACE PUBLIK {// Rincian Produk Permintaan 75 //http://120.27.23.105/product/getProductDetail?pid=75&source=android @get ("Produk/GetProductDetail") Flowable <pesageBean <noodshowbean> GetNewsable ( @peta) ( @peta) <pesageBean <noodshowbean> getNewsabs ( @peta; getNewan; @peta; getnewan; getNewan; @letsery <pesageBean <pesageBean>; // Query Shopping Cart // http: //120.27.23.105/product/getcarts? Uid = 3802 & source = android @get ("Produk/getCarts") Flowable <MessageBean <List <CartBean>>> getCart (@QueryMap peta <string, string> peta); // Hapus keranjang belanja // http: //120.27.23.105/product/getcarts? Uid = 3802 & source = android @get ("Produk/deletecart") Flowable <MessageBean <List <CartBean>>> getDel (@QueryMap peta <string, string> peta); // Tambahkan keranjang belanja // http: //120.27.23.105/product/addcart? Uid = 3802 & pid = 75 & source = android @get ("Produk/AddCart") Flowable <MessageBean <List <CartBean>> GetAdd (@QueryMap MAP <String, String> } 2.IView [java] Lihat antarmuka Copypublic Plain IView {void OnSuccess (Object O, String Tag); void onfailed (pengecualian e, tag string); } 3.Ipresenter [java] Lihat Plain CopyImport java.util.map; antarmuka publik ipresenter {void getData (peta <string, string> peta, string tag); } 4.imodel [java] Lihat CopyImport Java.util.map; Public Interface iModel {void getData (peta <string, string> peta, string tag); }5. Kode
1. Tampilan Kustom AddDeleteview
paket com.bwei.gepeng.myview; impor android.content.context; impor android.content.res.TypedArray; impor android.graphics.color; impor android.util.attributeset; impor android.view.view; impor android.widget.editText; impor android.widget.linearlayout; impor android.widget.textView; impor com.bwei.gepeng.r; AddDeleteview kelas publik memperluas linearlayout {private onadddelclickListener listener; Private EditText etNumber; // Berikan antarmuka callback klik untuk penggunaan eksternal antarmuka publik onadddelclickListener {void onAddClick (lihat v); membatalkan ondelclick (view v); } public void setonadddelClickListener (OnAddDelClickListener listener) {if (listener! = null) {this.listener = pendengar; }} public addDeleteview (konteks konteks) {this (context, null); } public addDeletEview (konteks konteks, atributset attrs) {this (context, attrs, 0); } public addDeletEview (konteks konteks, atributset attrs, int defstleattr) {super (konteks, attrs, defstleattr); initview (konteks, attrs, defstleattr); } private void initview (konteks konteks, attributeset attrs, int defstleattr) {view.inflate (konteks, r.layout.layout_add_delete, ini); // Dapatkan kontrol 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.adddeleteviewStyle); String leftText = typedArray.getString (r.stylable.adddeleteviewstyle_left_text); String rightText = typedArray.getString (r.stylable.adddeleteviewstyle_right_text); String middleText = typedArray.getString (r.stylable.adddeleteviewstyle_middle_text); int color = typedArray.getColor (r.stylable.adddeleteviewstyle_left_text_color, color.red); txtDelete.setText (LeftText); txtadd.setText (rightText); etnumber.setText (middleText); txtdelete.setTextColor (warna); // daur ulang typedArray.recycle (); txtDelete.setOnClickListener (OnClickListener baru () {@Override public void onClick (view view) {listener.ondelClick (view);}}); txtadd.setOnclickListener (OnClickListener baru () {@Override public void onClick (view view) {listener.onaddClick (view);}}); } // Berikan metode eksternal untuk memodifikasi nomor public void setNumber (nomor int) {if (number> 0) {etnumber.setText (angka+""); }} // Berikan metode eksternal untuk mendapatkan nomor public int getNumber () {string string = etnumber.gettext (). ToString (); int i = integer.parseint (string); Kembalikan i; }} 2. Retrofitutil kelas alat retrofit
paket com.bwei.gepeng.http; impor java.io.ioException; impor okhttp3.httpurl; impor okhtttp3.interceptor; impor okhttp3.okhttpClient; Impor okhttp3.ripest; impor okhttp3.response; impor retrieve2.retrofit; impor retrieve2.adapter.rxjava2.rxjava2callAdapterfactory; impor retrieve2.converter.gson.gsonconverterfactory; retrofitutil kelas publik {instance retrofitutils statis privat; retrofit retrofit akhir pribadi; private retrofitutils () {okhttpclient client = new OkhttpClient.Builder (). AddInterceptor (new Logger ()). Build (); retrofit = retrofit.builder () baru (klien) .addcallAdapterfactory (rxJavA2CallAdapterfactory.create ()) .addConverterfactory (gsonConverterfactory.create ()) .baseurl ("http:/120.27.27.27.27.2 } public static retrofitutils getInstance () {if (instance == null) {disinkronkan (retrofitutils.class) {if (instance == null) {instance = retrofitutils baru (); }}} return instance; } public apiservice getApiservice () {apiservice apiservice = retrofit.create (apiservice.class); Return APIService; } class Logger mengimplementasikan interceptor {@Override Public Response Intercept (rantai rantai) melempar IoException {request asli = rantai.Request (); Httpurl url = original.url (). NewBuilder () .addqueryparameter ("source", "android") .build (); // Tambahkan permintaan permintaan header permintaan = original.newbuilder () .url (url) .build (); rantai pengembalian. }}} 3.M lapisan
paket com.bwei.gepeng.model; impor com.bwei.gepeng.entity.cartbean; impor com.bwei.gepeng.entity.goodsshowbean; impor com.bwei.gepeng.entity.messageBean; impor com.bwei.gepeng.http.retrofitutils; impor com.bwei.gepeng.presenter.newspresenter; impor java.util.list; impor java.util.map; impor io.reactivex.flowable; Model kelas publik mengimplementasikan iModel {presenter newspresenter pribadi; model publik (presenter NewsPresenter) {this.presenter = presenter; } @Override public void getData (peta <string, string> peta, string tag) {if (tag.equals ("cart")) {flowable <messageBean <list <cartbean>>> flowable = retrofitutils.getInstance (). Getapiservice (). GetCart (peta); presenter.get2 (flowable, tag); } lain jika (tag.equals ("barang")) {flowable <MessageBean <Goodshowbean>> flowable = retrofitutils.getInstance (). getapiservice (). getNews (peta); presenter.get (flowable, tag); } else if (tag.equals ("del")) {flowable <messageBean <list <cartbean>>> flowable = retrofitutils.getInstance (). getapiservice (). getdel (peta); presenter.get3 (flowable, tag); } else if if (tag.equals ("add")) {flowable <messageBean <list <cartbean>>> flowable = retrofitutils.getInstance (). getapiservice (). getAdd (peta); presenter.get4 (flowable, tag); }}} 4.P Lapisan
paket com.bwei.gepeng.presenter; impor com.bwei.gepeng.entity.cartbean; impor com.bwei.gepeng.entity.goodsshowbean; impor com.bwei.gepeng.entity.messageBean; impor com.bwei.gepeng.model.model; impor com.bwei.gepeng.view.iview; impor java.util.list; impor java.util.map; impor io.reactivex.flowable; impor io.reactivex.android.schedulers.androidschedulers; impor io.reactivex.schedulers.schedulers; impor io.reactivex.subscribers.dispoSablesubscriber; Kelas Publik NewsPresenter mengimplementasikan ipresenter {private iview iview; swasta -disposubscriber pribadi <MessageBean <Goodshowbean>> Pelanggan; Private Disposablesubscriber <MessageBean <List <Cartbean>>> Pelanggan2; Private Disposablesubscriber <MessageBean <List <Cartbean>>> Pelanggan3; Private Disposablesubscriber <MessageBean <List <Cartbean>>> Pelanggan4; public void lampiran (IVIEW IVIEW) {this.iview = iview; } @Override public void getData (peta <string, string> peta, string tag) {model model = model baru (this); model.getData (peta, tag); } public void detachview () {if (iview! = null) {iview = null; } if (pelanggan! = null) {if (! Subscriber.isdisposed ()) {Subscriber.Dispose (); }} if (Subscriber2! = Null) {if (! Subscriber2.isdisposed ()) {Subscriber2.dispose (); }} if (Subscriber3! = Null) {if (! Subscriber3.isdisposed ()) {Subscriber3.dispose (); }} if (Subscriber4! = Null) {if (! Subscriber4.isdisposed ()) {Subscriber4.dispose (); }}} // Permintaan keranjang belanja public void get (flowable <MessageBean <Goodshowbean>> flowable, tag string akhir) {Subscriber = flowable.subscribeon (scedulers.io ()) .observeon (androidschedulers.mainthread (). SubscribeHeTHEWITHEWITHEWITREWSUBERSABLEVERS. public void OnNext (pesan <scuitsshowbean> listMessageBean) {if (listMessageBean! = null) {goodsshowbean = listMessageBean.getData (); @Override public void onComplete () {}}); } // Detail Produk Permintaan75 Public Void Get2 (Flowable <MessageBean <Daftar <TristBean>>> Flowable, Tag String Akhir) {Subscriber2 = flowable.subscribe (scarchuler.io ()) .observeon (androidschedulers.mainthread () .subscribith (DispoSables (). @Override public void onNext (MessageBean <List <Cartbean>>> Daftar) {if (List! = NULL) {Daftar <Cartbean> Data = List.getData (); } @Override public void onComplete () {}}); } // Hapus keranjang belanja public void get3 (flowable <messageBean <list <cartbean>>> flowable, final string tag) {subscriber3 = flowable.subscribeon (schedulers.io ()) .observeon (androidschedulers.mainthread () .subscribeThewith (dproidscrib {mageScreD {mageScreD (listed). public void onNext (pesan <daftar <cartbean>> {if (list! = null) {string code = list.getmsg (); } //Add shopping cart public void get4(Flowable<MessageBean<List<CartBean>>> flowable, final String tag) { subscriber4 = flowable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(new DisposableSubscriber<MessageBean<List<CartBean>>>() { @Override public void onNext (pesan <Daftar <CartBean>>> Daftar) {if (list! = Null) {string code = list.getMsg (); }} 5. Halaman Detail Produk MainActivity
paket com.bwei.gepeng.view; impor android.content.intent; impor android.os.bundle; impor android.support.v7.app.appcompatactivity; impor android.view.view; impor android.widget.textView; impor android.widget.toast; impor com.bwei.gepeng.r; impor com.bwei.gepeng.entity.goodsshowbean; impor com.bwei.gepeng.presenter.newspresenter; impor com.facebook.drawee.view.simpledraweeview; impor java.util.hashmap; impor java.util.map; impor butterknife.bindview; impor butterknife.butterknife; Impor Butterknife.onclick; MainActivity kelas publik memperluas appCompataCtivity mengimplementasikan iview {@bindview (r.id.my_image_view) SimpleDraweeview myimageView; @BindView (r.id.goods_title) TextView Goodstitle; @BindView (r.id.goods_price) TextView Goodsprice; presenter newspresenter pribadi; @Override Protected void onCreate (bundle savedInstanceState) {super.onCreate (saveDinstanceState); setContentView (r.layout.activity_main); Butterknife.Bind (ini); presenter = newspresenter baru (); presenter.AttachView (ini); //http://120.27.23.105/product/getProductDetail?pid=75&source=android peta <string, string> peta = hashmap baru <> (); peta.put ("pid", "75"); presenter.getData (peta, "barang"); } @Override public void onSuccess (objek o, tag string) {if (tag.equals ("goods")) {if (o! = Null) {goodsshowbean data = (goodsshowbean) o; //Log.e("gp "," onSuccess: " + data.tostring ()); myimageView.setImageuri (data.getImages (). split ("// |") [0]); goodstitle.setText (data.gettitle ()); Goodsprice.setText ("¥"+data.getPrice ()); }} lain if (tag.equals ("add")) {if (o! = null) {string msg = (string) o; Toast.makeText (MainActivity.THIS, msg, toast.length_short) .show (); }}} @Override public void onfailed (Exception e, string tag) {} @OnClick ({r.id.btn_addcart, r.id.btn_shopping}) public void onViewClick (view) {switch (view.getId ()) {case r.id.btn_addclick (viewc) {switch (view.getId ()) {case r.id.btn_addcar peta.put ("uid", "3802"); peta.put ("pid", "75"); presenter.getData (peta, "add"); //Toast.makeText(mainActivity.this, ayat berhasil ", toast.length_short) .show (); merusak; case r.id.btn_shopping: niat niat = niat baru (MainActivity.ini, Main2Activity.class); startactivity (niat); merusak; }}} 6. Adaptor Daftar Sekunder Expandableadapter
paket com.bwei.gepeng.adapter; impor android.content.context; impor android.view.view; impor android.view.viewGroup; impor android.widget.baseExpandableListAdapter; impor android.widget.button; impor android.widget.checkbox; impor android.widget.textView; impor android.widget.toast; impor com.bwei.gepeng.r; impor com.bwei.gepeng.entity.childbean; impor com.bwei.gepeng.entity.groupbean; impor com.bwei.gepeng.myview.adddeleteview; import com.bwei.gepeng.view.Main2Activity; import com.facebook.drawee.view.SimpleDraweeView; import java.util.ArrayList; impor 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; impor java.util.list; impor 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 Protected void onCreate (bundle savedInstanceState) {super.onCreate (saveDinstanceState); 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(); merusak; 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(); merusak; 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); merusak; 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); } merusak; } } if(flagdel){ break; } } } //Toast.makeText(Main2Activity.this,flagdel+"",Toast.LENGTH_SHORT).show(); merusak; } } //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; Peta <string, string> peta = new HashMap <> (); map.put("uid", "3802"); map.put("pid", pid+""); presenter.getData(map, "del"); flag=!flag; merusak; } } 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); }}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。