xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="22dp" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="40dp" android:background="#f89" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerInParent="true" android:text="<" android:textSize="25dp" android:id="@+id/back" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="商品详情" android:textSize="25dp" /> </RelativeLayout> <ImageView android:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/image" /> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="111" /> <TextView android:id="@+id/price" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="111" android:layout_marginTop="5dp" /> <TextView android:id="@+id/price2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="111" android:textColor="#f00" android:layout_marginTop="5dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="添加购物车" android:textColor="#f89" android:id="@+id/add" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="查看购物车" android:textColor="#f89" android:id="@+id/select" /> </LinearLayout> </LinearLayout>
model:
package myjd.jd.com.mn.mvp.Details.model; import android.util.Log; import myjd.jd.com.mn.bean.DetailsBean; import myjd.jd.com.mn.service.Api; import myjd.jd.com.mn.service.GetInstance; import myjd.jd.com.mn.utils.RetrofitUtils; import okhttp3.OkHttpClient; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; /** * Created by 小薇 on 2018/8/24. */ public class DatailsModelImpl { public void getData(final DetailsModel detailsModel, final int pid){ OkHttpClient okHttpClient=new OkHttpClient .Builder() .build(); RetrofitUtils.getInstance(Api.BAST,okHttpClient) .setCreate(GetInstance.class) .getDatails(pid) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Subscriber<DetailsBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(DetailsBean detailsBean) { detailsModel.onSuccess(detailsBean,pid); Log.i("ppp",detailsBean.getData().getTitle()); } }); } }
presenter:
package myjd.jd.com.mn.mvp.Details.presenter; import myjd.jd.com.mn.DetailActivity; import myjd.jd.com.mn.bean.DetailsBean; import myjd.jd.com.mn.mvp.Details.model.DatailsModelImpl; import myjd.jd.com.mn.mvp.Details.model.DetailsModel; import myjd.jd.com.mn.mvp.Details.view.DetailsView; /** * Created by 小薇 on 2018/8/24. */ public class DatailsPresenterImpl implements DetailsPresenter { private DetailsView detailsView; private DatailsModelImpl datailsModel; public DatailsPresenterImpl(DetailsView detailsView) { this.detailsView=detailsView; this.datailsModel = new DatailsModelImpl(); } public void getDatas(int pid){ datailsModel.getData(new DetailsModel() { @Override public void onSuccess(DetailsBean detailsBean, int pid) { detailsView.onSuccess(detailsBean); } @Override public void onError(int code) { detailsView.onError(1); } },pid); } @Override public void onDestory() { if(detailsView!=null){ detailsView=null; } } }
activity:
package myjd.jd.com.mn; import android.content.Intent; import android.graphics.Paint; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.bumptech.glide.Glide; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import myjd.jd.com.mn.bean.AddBean; import myjd.jd.com.mn.bean.DetailsBean; import myjd.jd.com.mn.mvp.Details.presenter.DatailsPresenterImpl; import myjd.jd.com.mn.mvp.Details.view.DetailsView; import myjd.jd.com.mn.service.Api; import myjd.jd.com.mn.service.GoodsInstance; import myjd.jd.com.mn.utils.RetrofitUtils; import okhttp3.OkHttpClient; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class DetailActivity extends AppCompatActivity implements DetailsView { @BindView(R.id.back) TextView back; @BindView(R.id.image) ImageView image; @BindView(R.id.title) TextView title; @BindView(R.id.price) TextView price; @BindView(R.id.price2) TextView price2; @BindView(R.id.add) Button add; @BindView(R.id.select) Button select; private DatailsPresenterImpl datailsPresenter; private int pid; private int uid=16863; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); ButterKnife.bind(this); pid = getIntent().getIntExtra("pid", 0); datailsPresenter = new DatailsPresenterImpl(this); datailsPresenter.getDatas(pid); select.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(DetailActivity.this,GucActivity.class); startActivity(intent); } }); //添加购物车 add(); } private void add() { add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OkHttpClient okHttpClient=new OkHttpClient .Builder() .build(); RetrofitUtils.getInstance(Api.BAST,okHttpClient) .setCreate(GoodsInstance.class) .getAdd(uid,pid,"null") .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<AddBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(AddBean addBean) { Toast.makeText(DetailActivity.this,""+addBean.getMsg(),Toast.LENGTH_LONG).show(); } }); } }); } @Override public void onSuccess(DetailsBean detailsBean) { price.setText("原价:" + detailsBean.getData().getPrice() + ""); //删除线 price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); title.setText(detailsBean.getData().getTitle()); price2.setText("优惠价:" + detailsBean.getData().getBargainPrice() + ""); String images = detailsBean.getData().getImages().split("\\|")[0]; Glide.with(this).load(images).into(image); } @Override public void onError(int code) { } @OnClick(R.id.back) public void onViewClicked() { finish(); } }
//购物车:
接口
package myjd.jd.com.mn.service; import myjd.jd.com.mn.bean.AddBean; import myjd.jd.com.mn.bean.GetCarts; import retrofit2.http.GET; import retrofit2.http.Query; import rx.Observable; /** * Created by 小薇 on 2018/8/24. */ public interface GoodsInstance { //https://www.zhaoapi.cn/product/getCarts @GET("product/getCarts") Observable<AddBean> getAdd(@Query("pid")int pid,@Query("uid")int uid,@Query("token")String token); @GET("product/getCarts") Observable<GetCarts> getCarts(@Query("uid")int uid , @Query("token") String token); @GET("product/updateCarts") Observable<AddBean> updateCart(@Query("uid") int Uid, @Query("pid") int Pid , @Query("sellerid") int sellerid , @Query("token") String Token, @Query("selected") int selected, @Query("num") int num); @GET("product/deleteCart") Observable<AddBean> deleteCartCart(@Query("uid") int uid, @Query("uid") int pid , @Query("token") String Token); }
//接口:
package myjd.jd.com.mn.mvp.shoppingcart.model; import myjd.jd.com.mn.bean.AddBean; import myjd.jd.com.mn.bean.GetCarts; import myjd.jd.com.mn.mvp.shoppingcart.GetDataBean; public interface ShoppingCartModle { //添加 void onAddBean(GetDataBean getDataBean, int pid, int uid, String token); //查询 void onSelect(GetDataBean getDataBean,int uid,String token); //删除 void onDelete(GetDataBean getDataBean,int uid,int pid,String token); //修改购物车 void Updata(int uid , String Token,int sellerid,int pid,int num,int selected,GetDataBean getDataBean); }
presneter:
package myjd.jd.com.mn.mvp.shoppingcart.presenter; public interface ShoppingCartPresenter { void onDestry(); /** * 查询 * */ void getGoods(); /** * 添加 */ void jia(int pid); /** * 减少 修改num * 是否选择中 修改 selected * 添加多个 修改num * @param sellerid * @param pid * @param num * @param selected */ void Updata(int sellerid,int pid,int num,int selected); /** * 删除 */ void Delete(int pid); } view:
package myjd.jd.com.mn.mvp.shoppingcart.view; import myjd.jd.com.mn.bean.GetCarts; public interface ShoopingCartView { void getGoodsData(GetCarts carts); void addGoodsData(String alert); }
单独
package myjd.jd.com.mn.mvp.shoppingcart; import myjd.jd.com.mn.bean.AddBean; import myjd.jd.com.mn.bean.GetCarts; public interface GetDataBean { void getDataBean(GetCarts getCarts); void addGoodsData(AddBean addBean); }
//类:
model:
package myjd.jd.com.mn.mvp.shoppingcart.model; import android.util.Log; import myjd.jd.com.mn.bean.AddBean; import myjd.jd.com.mn.bean.GetCarts; import myjd.jd.com.mn.mvp.shoppingcart.GetDataBean; import myjd.jd.com.mn.service.Api; import myjd.jd.com.mn.service.GoodsInstance; import myjd.jd.com.mn.utils.RetrofitUtils; import okhttp3.OkHttpClient; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class ShoppingCartModelImpl implements ShoppingCartModle{ @Override public void onAddBean(final GetDataBean getDataBean, int pid, int uid, String token) { OkHttpClient okHttpClient=new OkHttpClient .Builder() .build(); RetrofitUtils.getInstance(Api.BAST,okHttpClient) .setCreate(GoodsInstance.class) .getAdd(pid,uid,token) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Subscriber<AddBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(AddBean addBean) { getDataBean.addGoodsData(addBean); } }); } @Override public void onSelect(final GetDataBean getDataBean, int uid, String token) { OkHttpClient okHttpClient=new OkHttpClient .Builder() .build(); RetrofitUtils.getInstance(Api.BAST,okHttpClient) .setCreate(GoodsInstance.class) .getCarts(uid,token) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Subscriber<GetCarts>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(GetCarts getCarts) { getDataBean.getDataBean(getCarts); Log.i("ppppp",getCarts.getData().get(0).getList().get(0).getTitle()); } }); } @Override public void onDelete(final GetDataBean getDataBean, int uid, int pid, String token) { OkHttpClient okHttpClient=new OkHttpClient .Builder() .build(); RetrofitUtils.getInstance(Api.BAST,okHttpClient) .setCreate(GoodsInstance.class) .deleteCartCart(uid,pid,token) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Subscriber<AddBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(AddBean addBean) { getDataBean.addGoodsData(addBean); } }); } @Override public void Updata(int uid, String Token, int sellerid, int pid, int num, int selected, final GetDataBean getDataBean) { OkHttpClient okHttpClient=new OkHttpClient .Builder() .build(); RetrofitUtils.getInstance(Api.BAST,okHttpClient) .setCreate(GoodsInstance.class) .updateCart(uid,pid,sellerid,Token,num,selected) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Subscriber<AddBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(AddBean addBean) { getDataBean.addGoodsData(addBean); } }); } }
presenter:
package myjd.jd.com.mn.mvp.shoppingcart.presenter; import myjd.jd.com.mn.GucActivity; import myjd.jd.com.mn.bean.AddBean; import myjd.jd.com.mn.bean.GetCarts; import myjd.jd.com.mn.mvp.shoppingcart.GetDataBean; import myjd.jd.com.mn.mvp.shoppingcart.model.ShoppingCartModelImpl; import myjd.jd.com.mn.mvp.shoppingcart.model.ShoppingCartModle; import myjd.jd.com.mn.mvp.shoppingcart.view.ShoopingCartView; /** * Created by 小薇 on 2018/8/24. */ public class ShoppingCartPresenterImpl implements ShoppingCartPresenter,GetDataBean{ private ShoopingCartView shoopingCartView; private int uid; private String token; private ShoppingCartModle shoppingCartModle; public ShoppingCartPresenterImpl(ShoopingCartView shoopingCartView, int uid, String token) { this.shoopingCartView=shoopingCartView; this.uid=uid; this.token=token; this.shoppingCartModle=new ShoppingCartModelImpl(); } @Override public void onDestry() { if(shoopingCartView!=null){ shoopingCartView=null; } } @Override public void getGoods() { shoppingCartModle.onSelect(this,uid,token); } @Override public void jia(int pid) { shoppingCartModle.onAddBean(this,uid,pid,token); } @Override public void Updata(int sellerid, int pid, int num, int selected) { shoppingCartModle.Updata(uid,token,sellerid,pid,num,selected,this); } @Override public void Delete(int pid) { shoppingCartModle.onDelete(this,uid,pid,token); } @Override public void getDataBean(GetCarts getCarts) { shoopingCartView.getGoodsData(getCarts); } @Override public void addGoodsData(AddBean addBean) { if(addBean.getCode().equals("0")){ getGoods(); }else{ shoopingCartView.addGoodsData(addBean.getMsg()); } } }
view:
package myjd.jd.com.mn; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.CheckBox; import android.widget.ExpandableListView; import android.widget.TextView; import com.facebook.drawee.backends.pipeline.Fresco; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import myjd.jd.com.mn.adapter.CartAdapter; import myjd.jd.com.mn.bean.GetCarts; import myjd.jd.com.mn.mvp.shoppingcart.presenter.ShoppingCartPresenterImpl; import myjd.jd.com.mn.mvp.shoppingcart.view.ShoopingCartView; public class GucActivity extends AppCompatActivity implements ShoopingCartView { @BindView(R.id.exlistview) ExpandableListView exlistview; @BindView(R.id.good_cart_rb) CheckBox goodCartRb; @BindView(R.id.good_cart_xiaoji) TextView goodCartXiaoji; @BindView(R.id.good_cart_zhifu) TextView goodCartZhifu; private ShoppingCartPresenterImpl shoppingCartPresenter; private List<GetCarts.DataBean> data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Fresco.initialize(this); setContentView(R.layout.activity_guc); ButterKnife.bind(this); shoppingCartPresenter = new ShoppingCartPresenterImpl(this,16863,"7D5B9E808C9B473AC376D16D96935780"); shoppingCartPresenter.getGoods(); } @Override public void getGoodsData(GetCarts carts) { data = carts.getData(); CartAdapter adapter=new CartAdapter(GucActivity.this,data); exlistview.setAdapter(adapter); int count = exlistview.getCount(); for (int i = 0; i < count; i++) { exlistview.expandGroup(i); } } @Override public void addGoodsData(String alert) { } }
//adapter:
package myjd.jd.com.mn.adapter; import android.content.Context; import android.graphics.Paint; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; import com.bumptech.glide.Glide; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import myjd.jd.com.mn.R; import myjd.jd.com.mn.bean.GetCarts; public class CartAdapter extends BaseExpandableListAdapter{ private Context context; private List<GetCarts.DataBean> list; public CartAdapter(Context context, List<GetCarts.DataBean> list) { this.context = context; this.list = list; } @Override public int getGroupCount() { return list.size(); } @Override public int getChildrenCount(int i) { return list.get(i).getList().size(); } @Override public Object getGroup(int i) { return list.get(i); } @Override public Object getChild(int i, int i1) { return list.get(i).getList().get(i1); } @Override public long getGroupId(int i) { return i; } @Override public long getChildId(int i, int i1) { return i1; } @Override public boolean hasStableIds() { return true; } @Override public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) { ViewHolderOne holderOne=null; if(view==null){ holderOne=new ViewHolderOne(); view=LayoutInflater.from(context).inflate(R.layout.fg_shoppingcart_one,viewGroup,false); holderOne.goods_one_title=view.findViewById(R.id.goods_cart_one_tename); view.setTag(holderOne); }else{ holderOne= (ViewHolderOne) view.getTag(); } holderOne.goods_one_title.setText(list.get(i).getSellerName()); return view; } @Override public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) { ViewHolder viewHolder = null; if (view == null) { View view1 = LayoutInflater.from(context).inflate(R.layout.fg_shoppingcart_item, null, false); view = view1; viewHolder = new ViewHolder(view1); view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); } final List<GetCarts.DataBean.ListBean> listin = this.list.get(i).getList(); final GetCarts.DataBean.ListBean listBean = listin.get(i1); final int selected = list.get(i).getList().get(i1).getSelected(); final String sellerid = list.get(i).getSellerid(); final int pid = list.get(i).getList().get(i1).getPid(); final int num = list.get(i).getList().get(i1).getNum(); Glide.with(context).load(listBean.getImages().split("\\|")[0]).into(viewHolder.goodCartImage); viewHolder.goodCartCount.setText(listBean.getNum() + ""); viewHolder.goodCartPrice2.setText(listBean.getBargainPrice() + ""); viewHolder.goodCartPrice.setText(listBean.getPrice() + ""); viewHolder.goodCartPrice.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); //中间横线(删除线) viewHolder.goodCartTitle.setText(listBean.getTitle()); viewHolder.goodCartJian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int num = list.get(i).getList().get(i1).getNum(); if(num>1){ num--; }else{ num=0; } list.get(i).getList().get(i1).setNum(num); notifyDataSetChanged(); } }); viewHolder.goodCartJia.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int num = list.get(i).getList().get(i1).getNum(); num++; list.get(i).getList().get(i1).setNum(num); notifyDataSetChanged(); } }); return view; } @Override public boolean isChildSelectable(int i, int i1) { return true; } class ViewHolderOne{ TextView goods_one_title; } static class ViewHolder { @BindView(R.id.good_cart_rb) CheckBox goodCartRb; @BindView(R.id.good_cart_image) ImageButton goodCartImage; @BindView(R.id.good_cart_title) TextView goodCartTitle; @BindView(R.id.good_cart_price) TextView goodCartPrice; @BindView(R.id.good_cart_price2) TextView goodCartPrice2; @BindView(R.id.good_cart_jian) TextView goodCartJian; @BindView(R.id.good_cart_count) TextView goodCartCount; @BindView(R.id.good_cart_jia) TextView goodCartJia; @BindView(R.id.delete_cart) Button deleteCart; ViewHolder(View view) { ButterKnife.bind(this, view); } } }