이 기사는 모든 사람의 참조를 위해 Rxjava Retrofit 구현 쇼핑 카트의 특정 코드를 공유합니다. 특정 내용은 다음과 같습니다
생식 이미지 :
1. 의존성
주석 프로세서 'com.jakewharton : butterknife-compiler : 8.8.1'com.jakewharton : butterknife : 8.8.1 'compile'com.android.support:recyclerview-v7:26.0.0-alpha1 'compile'com.squareup.retrofit2 : 2.0.0 Compile 'com.squareup.retrofit2 : converter-gson : 2.3.0'compile 'com.facebook.fresco : fresco : 0.12.0'compile 'com.facebook.fresco : 0.12.0'compile 'com.facebook.fresco : animated-webp : 0.12.0'com.pace. Compile 'com.facebook.fresco : webpsupport : 0.12.0'컴파일 'io.reactivex.rxjava2 : rxjava : 2.1.7'compile 'com.squareup.retrofit2 : Adapter-rxjava2 : 2.3.0'compile 'io.reective.rxjava2 : rxandroid : 2.0.1'compire 'com.squareup.okhttp3 : okhttp : 3.9.0'컴파일 'com.google.code.gson : gson : 2.8.1'
2. 레이아웃
1. 추가 장치 레이아웃 Layout_ADD_DELETE
<? xml version = "1.0"alcoding = "utf-8"?> <linearlayout xmlns : android = "http://schemas.android.com/apk/res/android"android : layout_width = "match_parent : layout_height ="match_parent "및 오리엔테이션 ="Horizontal " Android : weightSum = "1"> <TextView Android : id = "@+id/txt_delete"Android : layout_width = "30dp"Android : layout_height = "30dp"Android = "text ="colluction "Android : gravity ="center : background : "#8b948b"/> <edittext : idttext : idtext : 안드로이드 : layout_margintop = "2dp"Android : layout_width = "50dp"Android : layout_height = "30dp"Android : background = "@drawable/edit"android : layout_weight = "0.00"Android : gravity = "center :"1 "/> Android : layout_width = "30dp"Android : layout_height = "30dp"Android : "텍스트 ="plus "gravity ="center "android : background ="#8b948b "/</linearlayout>
2. 제품 세부 사항 레이아웃 활동 _main
<? xml version = "1.0"encoding = "utf-8"?> <eleverivelayout xmlns : android = "http://schemas.android.com/apk/res/android"xmlns : fresco = "http://schemas.android.com/apk/res-s-souto"andwid _width = "andwid _ and width" Android : layout_height = "match_parent"> <linearlayout android : layout_width = "match_parent"android : layout_height = "match_parent"android : "vertical"> <com.facebook.view.view.simpledRaweeview android : id = "@+id/my_image_view" 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"Android : "wrap_content"Android : Android : layout_margin = "10dp"Android : text = "aahhh it it its yours"android : textsize = "20dp" /> <TextView Android : id = "@+id /goods_price"android : layout_width = "wrap_content : layout_height ="wrap_content "Android : Android : text = "text 18132"Android : textColor = "#dc5f2e"Android : 텍스트 사이즈 = "18dp" /> <TextView Android : layout_width = "wrap_content"android : layout_height = "wrap_content"andlay : layout_margin = "10dp"and am a am a am a a am a am a am a am a am a am a a merchanch_margin = "10dp" Android : textsize = "16dp"/> </linearlayout> <linearlayout android : layout_alignparentbottom = "true"Android : layout_width = "match_parent"android : layout_height = "50dp"android : android : "Horizontal"> Android : layout_weight = "1"Android : layout_width = "0dp"Android : layout_height = "match_parent"Android : back Android : layout_height = "match_parent"Android : back
3. 쇼핑 카트 레이아웃 활동 _main2
<? xml version = "1.0"alcoding = "utf-8"?> <linearlayout xmlns : android = "http://schemas.android.com/apk/res/android"android : layout_width = "match_parent : andlayout_height" "match_parent"및 Ergenation = "vertical"> <linearLayout Android : id = "@+id/top_bar"android : layout_width = "match_parent"android : layout_height = "48dp"android : background = "#f7f7f7"android : indertic = "vertical"> <elevelavelayout android : layout_width = "match _parent"and heighight " Android : "@Android : Color/Transparent"Android : Orientation = "Vertical"> <imageView Android : id = "@+id/back"Android : layout_width = "48dp"Android : layout_height = "48dp"Android : layout_alignparentleft = "true"android : "Center_gravity" Android : Src = "@drawable /back" /> <TextView Android : layout_width = "match_parent"Android : layout_height = "wrap_content"Android : gravity = "center"Android : minheight = "48dp"Android : "텍스트 ="쇼핑 카트 "Android : textColor ="#1a1a "and Textsize : and Textsize. <TextView : id = "@+id/edit"android : layout_width = "wrap_content"android : layout_height = "wrap_content : layout_alignparentright ="true "Android : layout_margin right ="40dp "and gravity ="center ""android ""48dp "Android" Android : TextColor = "#1a1a1a"Android : textsize = "14SP"Android : Visibility = "Visible"/> </eleverivelayout> </linearLayout> <ExpandablElistView Android : id = "@+id/exlistView"andloid : layout_width = "mays_parent" Android : layout_weight = "1"Android : childindicator = "@null"Android : groupindicator = "@null"> </expandablelistView> <linearLayout Android : "match_parent"Android : layout_height = "50dp"Android : "중앙 _vertical"Android : horizontal "> <center_vertical"Android : Android : id = "@+id /all_chekbox"Android : layout_marginleft = "20dp"Android : layout_width = "wrap_content"Android : layout_height = "wrap_content" /> <TextView Android : layout_width = "wrap_content" "wrap_content" "Android" 모든 "/> <linearlayout android : id ="@+id/id/ll_info "android : layout_width ="0dp "Android : layout_height ="wrap_content "android : layout_weight ="4 "> <linearLayout Android : layout_width ="mays_parent " 안드로이드 : "수직"안드로이드 : layout_marginright = "20dp"Android : layout_weight = "1"> <linearlayout android : layout_width = "match_parent"android : layout_height = "wrap_content"Android : "horizontal"and gravity = ""텍스트 " android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:text="total:" android:textSize="18sp" android:textStyle="bold" /> <TextView android:id="@+id/total_price" Android : layout_width = "wrap_content"Android : layout_height = "wrap_content"Android : 텍스트 = "¥ 0.00"Android : textColor = "#f23232"Android : textsize = "16sp"Android : adroid : "bold"/> </linearlayout> <textview "id ="@+id/wotallayout>. Android : layout_width = "match_parent"Android : layout_height = "wrap_content"Android : "Total Products :"Total Products : 0 조각 "Android : gravity ="right "Android :"16Sp "Android :"bold "/> </linearLayout> <TextView : id ="@+id/id/id/id/id/id = " Android : layout_width = "match_parent"Android : layout_height = "match_parent"Android : layout_weight = "3"Android : background = "#fd7a05"Android : "True"Android : "Center"Android : "텍스트 ="Clear "Android : TextColor ="#fafafa " Android : id = "@+id/tv_go_to_del"Android : layout_width = "match_parent"Android : layout_height = "match_parent"Android : layout_weight = "3"Android = "#e2231c"Android : "true"Android : "중심"안드로이드 "#"#"#"#"#e2231c"Android : "#e2231c"Android : "#e2231c". Android : Visibility = "Gone"/> </linearLayout> </linearLayout> </linearLayout>
4. 보조 목록 그룹 레벨 레이아웃 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 : layout_height ="match_parent "안드로이드 =#cfc3c3" 안드로이드 : "수평"> <체크 박스 안드로이드 : id = "@+id/group_checkbox"android : layout_marginleft = "20dp"android : layout_width = "wrap_content"android : layout_height = "wrap_content"andoid : "forcale" ""+id/shop " Android : layout_marginleft = "20dp"Android : layout_width = "wrap_content"Android : layout_height = "wrap_content"Android : "16dp" /> < /linearLayout>
5. 보조 목록 서브 레이 아웃 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/apk/res-souto" xmlns : fresco = "http://schemas.android.com/apk/res-auto"Android : layout_width = "match_parent"android : layout_height = "230dp"Android : Orientation = "Horizontal"> <checkbox android : id = "@+id/id/child_checkbox : and android : and android"and android " 안드로이드 : layout_marginleft = "20dp"Android : layout_marginbottom = "50dp"Android : layout_width = "wrap_content : layout_height ="wrap_content " /> <Relativelayout Android : layout_marginleft ="20dp "안드로이드 : Andwidth ="20dp " Android : layout_height = "match_parent"> <TextView Android : id = "@+id/shop_title"Android : layout_width = "wrap_content"android : layout_height = "wrap_content"Android : layout_alignparentleft = "true"android : layout_alignperentstart = Android : layout_marginleft = "17dp"Android : layout_marginstart = "17dp"Android : "TextView"Android : layout_alignparenttop = "true" /> <!-<ImageView Android : id = "@+id /shop_img"android : layout_width = "90dp"and and and and and and and android : id = "and and android : id ="@+id /shop_img "andlayout_width ="and android : id = Android : layout_margintop = "30dp"app : srccompat = "@mipmap/ic_launcher"android : layout_below = "@+id/shop_name"android : layout_alignparentleft = "true"android : layout_alignparentstart = "true"/>-> <com.eee.eee.view.eee.view.eee.view.eee Android : id = "@+id/shop_img : layout_width ="90dp "Android : layout_height ="90dp "Android : layout_margintop ="30dp "fresco : placeholderimage ="@mipmap/ic_launcher "and layout_below ="@+id/id " Android : layout_alignparentleft = "true"Android : layout_alignparentStart = "true"/> <TextView Android : id = "@+id/shop_price"android : layout_width = "wrap_content"Android : layout_height = "wrap_content"andlayout_aligntop =@ Android : layout_centerhorizontal = "true"Android : layout_margintop = "10dp"Android : 텍스트 = "¥ 20"Android : textColor = "#f23232"/> <com.bwei.gepeng.myview.adddeleteview android : id = "@+id/adv"and and legon : layout_width = "@+id/adv" Android : layout_height = "30dp"Android : layout_below = "@+id/shop_price"Android : layout_margintop = "30dp"Android : layout_marginleft = "140dp"앱 : left_text = "-"app : right_text = "+"app : middle_text = " </com.bwei.gepeng.myview.adddeleteview> <버튼 안드로이드 : id = "@+id/shop_delete"android : layout_width = "wrap_content"android : layout_height = "wrap_content"Android : layout_alignparendend = "true" Android : layout_centervertical = "true"Android : Visibility = "Invisible"Android : text = "delete"/> </eleverivelayout> </linearlayout>
3. 엔티티 클래스
1. MessageBean
패키지 com.bwei.gepeng.entity; 공개 클래스 MessageBean <t> {개인 문자열 코드; 개인 T 데이터; 개인 문자열 msg; 개인 판매자 비안 판매자; public String getCode () {return code; } public void setCode (문자열 코드) {this.code = code; } public t getData () {반환 데이터; } public void setData (t data) {this.data = data; } public String getMsg () {return msg; } public void setmsg (문자열 msg) {this.msg = msg; } public sellerBean getSeller () {return seller; } public void setseller (SellerBean Seller) {this.seller = 판매자; } public static class sellerbean {/** * 설명 : 나는 가맹점 19 * 아이콘 : http://120.27.23.105/images/icon.png * 이름 : Merchant 19 * ProductNums : 999 * 점수 : 5.0 * sellerid : 19 */private string description; 개인 문자열 아이콘; 개인 문자열 이름; 개인 INT ProductNums; 개인 이중 점수; 개인 int sellerid; 공개 문자열 getDescription () {return description; } public void setDescription (문자열 설명) {this.Description = 설명; } public String getIcon () {리턴 아이콘; } public void seticon (문자열 아이콘) {this.icon = 아이콘; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public int getProductNums () {return productNums; } public void setProductNums (int productNums) {this.productnums = productNums; } public double getScore () {반환 점수; } 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 BargainPrice; 개인 문자열 CreateTime; 개인 문자열 세부 사항; 개인 문자열 이미지; 개인 int itemtype; 개인 int pid; 개인 이중 가격; 개인 int pscid; 개인 INT Salesenum; 개인 int sellerid; 개인 문자열 소제목; 개인 문자열 제목; Public Double GetBargainPrice () {return bargainprice; } public void setBargainPrice (Double BargainPrice) {this.bargainprice = bargainprice; } 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 images; } public void setImages (문자열 이미지) {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 () {반환 가격; } public void setPrice (이중 가격) {this.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; } public String getSubhead () {return subhead; } public void setSubhead (String subhead) {this.subhead = subhead; } public string getTitle () {return title; } public void settitle (문자열 제목) {this.title = title; } @Override public String toString () {return "return"goodsshowbean { " +"bargainprice = " + bargainprice +", createTime = ' " + createTime +'/'' +", detailUrl = ' " + detailUrl +'/'' +", images = ' +'/'' + ", itemType =" + itemtype = " + itemtype =" + itemtype price = " + price +", pscid = " + pscid +", salesenum = " + salesenum +", sellerid = " + sellerid +", subhead = ' " + subhead +'/'' +", title = ' + title +'/' +'} '; }}3. Cartbean
패키지 com.bwei.gepeng.entity; Java.util.list 가져 오기; Public Class Cartbean {Private String SellerName; 개인 문자열 판매자; 비공개 목록 <SlistBean> 목록; public string getSellername () {return sellername; } public void setsellername (String SellerName) {this.sellername = sellerName; } public String getSellerid () {return sellerId; } public void setsellerid (String SellerId) {this.sellerid = sellerId; } public list <STREBEAN> getList () {반환 목록; } public void setList (list <listBean> list) {this.list = list; } public static class listbean {private double bargainprice; 개인 문자열 CreateTime; 개인 문자열 세부 사항; 개인 문자열 이미지; 개인 int Num; 개인 int pid; 개인 이중 가격; 개인 int pscid; 개인 INT가 선택된; 개인 int sellerid; 개인 문자열 소제목; 개인 문자열 제목; Public Double GetBargainPrice () {return bargainprice; } public void setBargainPrice (Double BargainPrice) {this.bargainprice = bargainprice; } 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 images; } public void setImages (문자열 이미지) {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 () {반환 가격; } public void setPrice (이중 가격) {this.price = 가격; } public int getPscid () {return pscid; } public void setpscid (int pscid) {this.pscid = pscid; } public int getSelected () {return 선택; } public void setSelected (int selected) {this.selected = selected; } 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 (문자열 제목) {this.title = title; }} @override public string toString () {return "CartBean {" + "sellerName = '" + sellerName +'/'' + ", sellerId = '" + sellerId +'/'' + ", list =" + list + '}'; }}4. Groupbean
패키지 com.bwei.gepeng.entity; 공개 클래스 GroupBean {private String SellerName; 개인 부울 groupB; public groupbean (String SellerName, 부울 groupucb) {this.sellername = sellername; this.gropucb = groupucb; } public String getSellername () {return sellerName; } public void setsellername (String SellerName) {this.sellername = sellerName; } public boolean isgropucb () {return groupucb; } public void setGropucb (부울 그룹ub) {this.gropucb = groupucb; } @override public String toString () {return "GroupBean {" + "sellerName = '" + sellerName +'/' + ", groupUcb =" + groupUcb +'} '; }}5. Childbean
패키지 com.bwei.gepeng.entity; 공개 수업 출산 {개인 문자열 제목; 개인 문자열 이미지; 개인 이중 가격; 개인 int Num; 개인 부울 자식; 개인 부울 BTN; 개인 int pid; 공개 출산 (문자열 제목, 문자열 이미지, 이중 가격, int num, 부울 자식, 부울 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; } public boolean isbtn () {return btn; } public void setbtn (boolean btn) {this.btn = btn; } public string getTitle () {return title; } public void settitle (문자열 제목) {this.title = title; } public String getImages () {return images; } public void setImages (문자열 이미지) {this.images = images; } public double getPrice () {반환 가격; } public void setPrice (이중 가격) {this.price = 가격; } public int getNum () {return num; } public void setnum (int num) {this.num = num; } public boolean ischildcb () {return childcb; } public void setchildcb (부울 hildcb) {this.childcb = childcb; } @Override public String toString () {return "return"return { " +"title = ' + title +'/' + ", images ='" + images + '/' ' + ", price =" + price + ", num =" + num + ", childcb =" + childcb + ", btn =" + btn + ", pid =" + pid +'} '; }}4. 인터페이스
1. 절대 서비스
패키지 com.bwei.gepeng.http; com.bwei.gepeng.entity.cartbean import; com.bwei.gepeng.entity.goodsshowbean import; com.bwei.gepeng.entity.messagebean import; Java.util.list 가져 오기; java.util.map import; IO.ReactiveC.Flowable 가져 오기; 가져 오기 retrieve2.http.get; 가져 오기 restieve2.http.querymap; public interface apiservice {// 쿼리 제품 세부 사항 75 //http://120.27.23.105/product/getProductDetail?pid=75&source=Android @Get ( "Product/GetProductDetail") flowable <MessageBean <GoodsShowbean>> getNews (@QueryMap 맵 <문자열, 문자열> 맵); // 쿼리 쇼핑 카트 // http : //120.27.23.105/product/getcarts? uid = 3802 & source = android @get ( "product/getcarts") flowable <messagebean <list <cartbean >>> getCart (@QueryMap map <string, string> map); // 쇼핑 카트 삭제 // http : //120.27.23.105/product/getcarts? uid = 3802 & source = android @get ( "product/deletecart") flowable <messagebean <list <cartbean >>> getdel (@QueryMap map <문자열> map); // 쇼핑 카트 추가 // http : //120.27.23.105/product/addcart? uid = 3802 & pid = 75 & source = android @get ( "product/addcart") flowable <messagebean <list <cartbean >>> getAdd (@QueryMap map <string> map); } 2.iview [java]보기 일반 copypublic interface iview {void onsuccess (Object O, String Tag); void onfailed (예외 e, 문자열 태그); }. public interface ipresenter {void getData (map <String, String> Map, String Tag); } 4.Imodel [java]보기 일반 Copyimport java.util.map; public interface imodel {void getData (map <String, String> Map, String Tag); }5. 코드
1. 사용자 정의보기 AddDeleteView
패키지 com.bwei.gepeng.myview; android.content.context 가져 오기; import android.content.res.typedarray; Import Android.graphics.color; import android.util.attributeset; 안드로이드를 가져옵니다. view.view; import android.widget.edittext; Import Android.widget.linearlayout; import android.widget.textView; com.bwei.gepeng.r import; 공개 클래스 AddDeleteView는 LinearLayout을 확장합니다. 개인 edittext etnumber; // 외부 사용에 대한 클릭 콜백 인터페이스 제공 공용 인터페이스 onadddelclicklistener {void onaddclick (view v); void ondelClick (View V); } public void setonAddDelClickListener (onAddDelClickListener 리스너) {if (Listener! = null) {this.listener = Listener; }} public addDeleteView (컨텍스트 컨텍스트) {this (컨텍스트, null); } public addDeleteView (컨텍스트 컨텍스트, 속성 attrs) {this (컨텍스트, attrs, 0); } public addDeleteView (컨텍스트 컨텍스트, 속성 attrs, int defstyleattr) {super (컨텍스트, attrs, defstyleattr); initView (컨텍스트, attrs, defstyleattr); } private void initView (컨텍스트 컨텍스트, 속성 attrs, int defstyleattr) {view.inflate (context, r.layout.layout_add_delete, this); // 제어 텍스트를 가져옵니다. 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.Styleble.AddDeleteViewStyle_right_text); 문자열 middletext = typedarray.getString (r.stylable.adddeleteviewstyle_middle_text); int color = typedArray.getColor (r.Stylable.AddDeleteViewStyle_left_text_color, color.red); txtDelete.settext (왼쪽 텍스트); txtadd.settext (RightText); etnumber.settext (middletext); txtDelete.settextColor (색); // recycle typedarray.recycle (); txtDelete.setOnclickListener (new onclickListener () {@override public void onclick (보기) {liater.ondelclick (view);}}); txtAdd.setOnclickListener (new onclickListener () {@override public void onclick (보기) {listener.onaddclick (view);}}); } // 숫자를 수정하기위한 외부 메소드를 제공 공개 void setNumber (int number) {if (number> 0) {etnumber.settext (number+""); }} // 현재 번호를 얻기위한 외부 메소드를 제공 int getNumb () {String String = etnumber.getText (). toString (); int i = integer.parseint (문자열); 반환 i; }} 2. 도구 클래스 개량을 개조합니다
패키지 com.bwei.gepeng.http; import java.io.ioexception; import okhttp3.httpurl; OKHTTP3.interceptor 가져 오기; OKHTTP3.OKHTTPCLIENT 가져 오기; OKHTTP3.request 가져 오기; import okhttp3.Response; 가져 오기 retrieve2.retrofit; 가져 오기 retrieve2.adapter.rxjava2.rxjava2calladapterfactory; 가져 오기 retieve2.converter.gson.gsonConverterFactory; 공개 클래스 retrofitutils {개인 정적 휘발성 retrofitutils 인스턴스; 개인 최종 개조 개조; 개인 retrofitutils () {okhttpclient client = new okhttpclient.builder (). addInterceptor (new logger ()). build (); retrofit = new retrofit.builder (). client (client) .addcalladapterfactory (rxjava2calladapterfactory.create ()) .addconverterfactory (gsonconverterfactory.create ()). } public static retrofitutils getInstance () {if (instance == null) {synchronized (retrofitutils.class) {if (instance == null) {instance = new retrofitutils (); }}} return 인스턴스; } public apiservice getapiservice () {apiservice apiservice = retrofit.create (apiservice.class); 반환 Apiservice; } 클래스 로거는 인터셉터를 구현합니다 {@override public response intercept (체인 체인)는 ioexception {request original = chain.request (); httpurl url = original.url (). newbuilder () .addqueryparameter ( "source", "android") .build (); // 요청 헤더 요청 요청 = original.newbuilder () .url (url) .build (); 반품 체인 .proceed (요청); }}} 3.M 레이어
패키지 com.bwei.gepeng.model; com.bwei.gepeng.entity.cartbean import; com.bwei.gepeng.entity.goodsshowbean import; com.bwei.gepeng.entity.messagebean import; com.bwei.gepeng.http.retrofitutils import; com.bwei.gepeng.presenter.newspresenter import; Java.util.list 가져 오기; java.util.map import; IO.ReactiveC.Flowable 가져 오기; 공개 클래스 모델은 Imodel을 구현합니다. 공개 모델 (신문 발표자) {this.presenter = 발표자; } @override public void getData (map <string, string> map, String tag) {if (tag.equals ( "cart")) {flowable <list <cartbean >>> flowable = retrofitutils.getInstance (). getApiservice (). getCart (map); Presenter.get2 (flowable, tag); } else if (tag.equals ( "goods")) {flowable <messagebean <goodsshowbean >> flowable = retrofitutils.getInstance (). getApiservice (). getNews (map); Presenter.get (flowable, tag); } else if (tag.equals ( "del")) {flowable <messagebean <list <cartbean >>> flowable = retrofitutils.getInstance (). getApiservice (). getDel (map); Presenter.get3 (flowable, tag); } else if (tag.equals ( "add")) {flowable <messagebean <list <cartbean >>> flowable = retrofitutils.getInstance (). getApiservice (). getAdd (map); Presenter.get4 (flowable, tag); }}} 4.P 층
패키지 com.bwei.gepeng.presenter; com.bwei.gepeng.entity.cartbean import; com.bwei.gepeng.entity.goodsshowbean import; com.bwei.gepeng.entity.messagebean import; com.bwei.gepeng.model.Model 가져 오기; com.bwei.gepeng.view.iview import; Java.util.list 가져 오기; java.util.map import; IO.ReactiveC.Flowable 가져 오기; IO.Reactivex.Android.schedulers.Androidschedulers import; IO.Reactivex.Schedulers.schedulers import; IO.ReactiveC.Subscriber.SubsposablesubScriber 가져 오기; 공개 클래스 신문사는 ipresenter {private iview iview; Private DisposablesubScriber <MessageBean <goodsshowbean >> 가입자; Private DisposablesubScriber <MessageBean <list <cartbean >>> 가입자 2; Private DisposablesubScriber <MessageBean <List <CartBean >>> 가입자 3; Private DisposablesubScriber <MessageBean <list <cartbean >>> 가입자 4; public void att } @override public void getData (map <string, String> map, String tag) {model model = new Model (this); model.getData (지도, 태그); } public void detachview () {if (iview! = null) {iview = null; } if (가입자! = 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 (); }}} // 쿼리 쇼핑 카트 공개 void get get (flowable <messagebean <goodsshowbean >> final String tag) {가입자 = flowable.subscribeon (schedulers.io ()) .Observeon (AndroidSchedulers.MainThread ()) .Subsbewith (kidsbebean @) <) Public void onnext (ListShowbean> ListMessageBean) {goodsshowbean data = listmessagebean.getData (data, tag) @voide (trow voide); public void oncomplete () {}}); } // 쿼리 제품 세부 사항 75 public void get2 (flowable <messagebean <list <cartbean >>> flowable, final string tag) {subscriber2 = flowable.subscribeon (schedulers.io ()) .observeon (androidschedulers.mainthread ()) .Subscriber (newscribbean <) @override public void onnext (messagebean <cartbean >>> list) {if (list! = null) {data! = null) {iview.onsuccess (data, tag) @override void (trashive). @override public void oncomplete () {}}); } // 쇼핑 카트 공개 void get3 (flowable <messagebean <list <cartbean >>> final string tag) {subscriber3 = flowable.subscribeon (schedulers.io ()) .Observeon (androidschedulers.MainThread ()) .subsbewith (cartbebean < ^) <<). public void onnext (messagebean <cartbean >> list) {if (list! = null) {string code = list.getmsg (code, tag) @void onerror (trownable) {tubled (t)); } // 쇼핑 카트 추가 공개 void get4 (flowable <messagebean <list <cartbean >>> flowable, final string tag) {subscriber4 = flowable.subscribeon (schedulers.io ()) .Observeon (AndroidSchedulers.MainThread ()) .subsbewith (newsbobsbean <) <<blebean <) void onnext <rist <cartbean >>> list) {if (list! = null) {string code = list.getmsg (code, tag) @void onerror (trownable) }} 5. Mainactivity 제품 세부 정보 페이지
패키지 com.bwei.gepeng.view; android.content.intent import; android.os.bundle 가져 오기; indroid.support.v7.app.appcompatactivity import; 안드로이드를 가져옵니다. view.view; import android.widget.textView; android.widget.toast 가져 오기; com.bwei.gepeng.r import; com.bwei.gepeng.entity.goodsshowbean import; com.bwei.gepeng.presenter.newspresenter import; com.facebook.drawee.view.simpledraweeview import; java.util.hashmap import; java.util.map import; import butterknife.bindview; Butterknife.butterknife 수입; import butterknife.onclick; 공개 클래스 Mainactivity는 AppCompatactivity emplements Iview {@bindview (r.id.my_image_view) simpledRaweeview myImageView; @BindView (r.id.goods_title) TextView Goodstitle; @BindView (r.id.goods_price) TextView goodsprice; 개인 신문 발표자; @override protected void onecreate (Bundle SavedInstancestate) {super.oncreate (savedinstancestate); setContentView (R.Layout.Activity_Main); Butterknife.bind (this); 발표자 = 새로운 신문사 (); 발표자 .attachview (this); //http://120.27.23.105/product/getProductDetail?pid=75&source=Android map <String, String> map = new Hashmap <> (); map.put ( "pid", "75"); Presenter.getData (Map, "Goods"); } @override public void onsuccess (Object O, String tag) {if (tag.equals ( "goods")) {if (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 ()); }} else if (tag.equals ( "add")) {if (o! = null) {String msg = (string) o; 토스트 .maketext (mainActivity.this, msg, toast.length_short) .show (); }}} @override public void onfailed (예외 e, 문자열 태그) {}} @onclick ({r.id.btn_addcart, r.id.btn_shopping}) public void onviewclicked (보기) {switch (view.getId ()) {case r.id.btn_addcart : map <string, new Hashmap. map.put ( "uid", "3802"); map.put ( "pid", "75"); Presenter.getData (지도, "add"); //toast.maketext.mainactivity.this,"Add 성공적으로 ", 토스트 .length_short) .show (); 부서지다; CASE R.ID.BTN_SHOPPING : 의도 의도 = 새로운 의도 (MainActivity.this, Main2Activity.class); StartActivity (의도); 부서지다; }}} 6. 보조 목록 어댑터 ExpandableAdapter
패키지 com.bwei.gepeng.adapter; android.content.context 가져 오기; 안드로이드를 가져옵니다. view.view; 안드로이드를 가져옵니다 .View.ViewGroup; import android.widget.baseexpandablelistadapter; Import Android.widget.button; 안드로이드를 가져옵니다 .widget.checkbox; import android.widget.textView; android.widget.toast 가져 오기; com.bwei.gepeng.r import; import com.bwei.gepeng.entity.childbean; com.bwei.gepeng.entity.groupbean import; import com.bwei.gepeng.myview.adddeleteview; com.bwei.gepeng.view.main2activity 가져 오기; com.facebook.drawee.view.simpledraweeview import; java.util.arraylist 가져 오기; Java.util.list 가져 오기; Public Class ExpandableAdapter는 Bainexpandablelistadapter를 확장합니다. 개인 목록 <GroupBean> GroupBeen = New ArrayList <> (); 비공개 목록 <목록 <chirdbean >> whilbeen = new ArrayList <> (); 개인 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; java.util.arraylist 가져 오기; java.util.hashmap import; Java.util.list 가져 오기; java.util.map import; 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(); 부서지다; 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; map <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; 이중 합계 = 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; 카운트 ++; } } } 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을 더 지원하기를 바랍니다.