详情页面的布局——activity_xq
<TextView android:id="@+id/GWC" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="点击进入" android:textSize="20sp" android:textStyle="bold" /> <android.support.v7.widget.RecyclerView android:id="@+id/XQ_Recy" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>详情页面item布局——xqitem
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="160dp" android:orientation="horizontal"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/xq_fresco" android:layout_width="200dp" android:layout_height="160dp" android:src="@mipmap/ic_launcher" fresco:failureImage="@mipmap/ic_launcher" fresco:placeholderImage="@mipmap/ic_launcher" /> <LinearLayout android:layout_width="match_parent" android:layout_height="160dp" android:orientation="vertical"> <TextView android:id="@+id/xq_name" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center" /> <TextView android:id="@+id/xq_price" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center" /> </LinearLayout> </LinearLayout> <Button android:id="@+id/xq_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="加入购物车" /> </LinearLayout>
购物车页面的XML文件——activity_main
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.shoppingcar.MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="20dp"> <TextView android:id="@+id/back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="<" android:textSize="23sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="购物车" android:textSize="23sp" android:textStyle="bold" /> <TextView android:id="@+id/bianji" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:text="编辑" android:textSize="20sp" /> </RelativeLayout> <TextView android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginTop="5dp" android:background="#D4D4D4" /> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_View" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="center_vertical" android:orientation="horizontal"> <CheckBox android:id="@+id/quanxuan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:background="@drawable/shopcart_unselected" android:button="@null" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="40dp" android:text="全选" android:textSize="23sp" android:textStyle="bold" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_marginRight="70dp" android:orientation="vertical"> <TextView android:id="@+id/total_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="总价 : ¥0元" android:textColor="#e53e42" android:textSize="20sp" /> <TextView android:id="@+id/total_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/total_price" android:text="共0件商品" android:textSize="20sp" /> </LinearLayout> <TextView android:id="@+id/quzhifu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="#FC7903" android:gravity="center" android:padding="30dp" android:text="去支付" android:textColor="#fff" android:textSize="22sp" /> <LinearLayout android:id="@+id/linear_shanchu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginLeft="30dp" android:orientation="horizontal" android:visibility="gone"> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:background="#FC7903" android:gravity="center" android:padding="20dp" android:paddingLeft="30dp" android:paddingRight="30dp" android:text="分享宝贝" android:textColor="#fff" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:background="#FC7903" android:gravity="center" android:padding="20dp" android:paddingLeft="30dp" android:paddingRight="30dp" android:text="移到收藏夹" android:textColor="#fff" android:textSize="20sp" /> <TextView android:id="@+id/shanchu" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="#DC143C" android:gravity="center" android:padding="30dp" android:paddingLeft="30dp" android:paddingRight="30dp" android:text="删除" android:textColor="#fff" android:textSize="20sp" /> </LinearLayout> </RelativeLayout> </LinearLayout>购物车条目的XML文件——recy_cart_item
<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FFFFFF" android:padding="5dp"> <CheckBox android:id="@+id/shop_checkbox" android:layout_width="50dp" android:layout_height="50dp" android:layout_centerVertical="true" /> <TextView android:id="@+id/shop_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="35dp" android:text="良品铺子" android:textSize="23sp" android:textStyle="bold" /> <TextView android:id="@+id/item_bianji" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:text="编辑" android:textSize="20sp" /> </RelativeLayout> <TextView android:layout_width="match_parent" android:layout_height="1dp" android:background="#D4D4D4" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#F2F2F2" android:gravity="center_vertical" android:orientation="horizontal"> <CheckBox android:id="@+id/item_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/item_face" android:layout_width="140dp" android:layout_height="140dp" android:src="@mipmap/ic_launcher" fresco:failureImage="@mipmap/ic_launcher" fresco:placeholderImage="@mipmap/ic_launcher" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_weight="1" android:orientation="vertical"> <TextView android:id="@+id/item_name" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" android:text="三只松鼠" android:textSize="20sp" /> <TextView android:id="@+id/item_price" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" android:text="299" android:textColor="#f00" android:textSize="23sp" /> <com.example.shoppingcar.CustomJiaJian android:id="@+id/custom_jiajian" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" android:visibility="gone" /> <TextView android:id="@+id/item_yansechima" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="颜色 : 黑色 ; 尺码: 29" android:textSize="20sp" android:visibility="gone" /> </LinearLayout> <!-- <ImageView android:visibility="gone" android:id="@+id/item_delete" android:layout_marginRight="10dp" android:src="@drawable/shopcart_delete" android:layout_width="30dp" android:layout_height="30dp" />--> <TextView android:id="@+id/item_delete" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="#FC7903" android:gravity="center" android:padding="20dp" android:text="删除" android:textColor="#fff" android:textSize="23sp" android:visibility="gone" /> </LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="1dp" android:background="#D4D4D4" />加减器的XML文件——custom_jiajian
<Button android:background="#F2F1F1" android:textSize="20sp" android:id="@+id/reverse" android:text="一" android:layout_width="40dp" android:layout_height="40dp" /> <EditText android:gravity="center" android:background="#FAFAFA" android:textStyle="bold" android:textSize="23sp" android:layout_width="40dp" android:layout_height="40dp" android:text="1" android:id="@+id/count" /> <Button android:id="@+id/add" android:background="#F2F1F1" android:textSize="25sp" android:text="+" android:layout_width="40dp" android:layout_height="40dp" />加减器代码——CustomJiaJian
public class CustomJiaJian extends LinearLayout{ private Button reverse; private Button add; private EditText countEdit; private int mCount =1; public CustomJiaJian(Context context) { super(context); } public CustomJiaJian(final Context context, @Nullable AttributeSet attrs) { super(context, attrs); View view = View.inflate(context, R.layout.custom_jiajian,this); reverse = (Button) view.findViewById(R.id.reverse); add = (Button) view.findViewById(R.id.add); countEdit = (EditText) view.findViewById(R.id.count); reverse.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String content = countEdit.getText().toString().trim(); int count = Integer.valueOf(content); if(count>1){ mCount = count-1; countEdit.setText(mCount+""); //回调给adapter里面 if(customListener!=null){ customListener.jiajian(mCount); } }else{ Toast.makeText(context, "最小数量为1", Toast.LENGTH_SHORT).show(); } } }); add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String content = countEdit.getText().toString().trim(); int count = Integer.valueOf(content)+1; mCount = count; countEdit.setText(mCount+""); //接口回调给adapter if(customListener!=null){ customListener.jiajian(mCount); } } }); } public CustomJiaJian(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } CustomListener customListener; public void setCustomListener(CustomListener customListener){ this.customListener = customListener; } //加减的接口 public interface CustomListener{ public void jiajian(int count); public void shuRuZhi(int count); } public void setEditText(int num) { if(countEdit!=null){ countEdit.setText(num+""); } } }OKhttp封装
public class OkhttpUtils { private static OkHttpClient client = null; public static OkHttpClient getInstance() { if (client == null) { synchronized (OkhttpUtils.class) { if (client == null) { client = new OkHttpClient.Builder() .writeTimeout(20000, TimeUnit.SECONDS) .readTimeout(20000, TimeUnit.SECONDS) .connectTimeout(20000, TimeUnit.SECONDS) .build(); } } } return client; } }Retrofit封装public class RetrofitUtils { private static IGetHttpUrl service = null; public static IGetHttpUrl getInstance() { if (service == null) { synchronized (RetrofitUtils.class) { if (service == null){ Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://120.27.23.105/product/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(OkhttpUtils.getInstance()) .build(); service = retrofit.create(IGetHttpUrl.class); } } } return service; } }APIFactory工具类详情页面的MVP以及适配器+beanpublic class APIFactory { private static APIFactory factory = null; public static APIFactory getInstance() { if (factory == null) { synchronized (APIFactory.class) { if (factory == null) { factory = new APIFactory(); } } } return factory; } public void query(Map<String, String> map, Observer<queryBean> observer) { RetrofitUtils.getInstance().queryUrl(map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } public void delete(Map<String, String> map, Observer<deleteBean> observer) { RetrofitUtils.getInstance().deleteUrl(map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } public void cart(Map<String, String> map, Observer<CartBean> observer) { RetrofitUtils.getInstance().cartUrl(map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } public void add(Map<String, String> map, Observer<addBean> observer) { RetrofitUtils.getInstance().addUrl(map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } }Retrofit请求网络数据接口
public interface IGetHttpUrl { @GET("searchProducts?page=1&source=android") Observable<CartBean> cartUrl(@QueryMap Map<String, String> map); // http://120.27.23.105/product/searchProducts?keywords=手机&page=1&source=android @GET("addCart?token=0DA2B4A9F80689086B333CADEB7F306B&source=android") Observable<addBean> addUrl(@QueryMap Map<String, String> map); // Observable<addBean> addUrl(@Query("uid") String uid, @Query("pid") String pid); @GET("getCarts?token=0DA2B4A9F80689086B333CADEB7F306B&source=android") Observable<queryBean> queryUrl(@QueryMap Map<String, String> map); // Observable<queryBean> queryUrl(@Query("uid") String uid); @GET("deleteCart?token=0DA2B4A9F80689086B333CADEB7F306B&source=android") Observable<deleteBean> deleteUrl(@QueryMap Map<String, String> map); // Observable<deleteBean> deleteUrl(@Query("uid") String uid, @Query("pid") String pid); }购物车MainActivity
public class MainActivity extends AppCompatActivity implements queryView { @Bind(R.id.bianji) TextView bianji; @Bind(R.id.recycler_View) RecyclerView recyclerView; @Bind(R.id.quanxuan) CheckBox quanxuan; @Bind(R.id.total_price) TextView totalPrice; @Bind(R.id.total_num) TextView totalNum; @Bind(R.id.quzhifu) TextView quzhifu; @Bind(R.id.shanchu) TextView shanchu; @Bind(R.id.linear_shanchu) LinearLayout linearShanchu; @Bind(R.id.activity_main) LinearLayout activityMain; @Bind(R.id.back) TextView back; private RecyAdapter recyAdapter; private com.example.shoppingcar.presenter.queryPresenter queryPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); bianji.setTag(1);//编辑设置TAG=1 quanxuan.setTag(1);//全选设置TAG=1 为未选中 queryPresenter = new queryPresenter(this); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyAdapter = new RecyAdapter(this); queryPresenter.queryFF(); recyclerView.setAdapter(recyAdapter); back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(MainActivity.this, XQActivity.class)); finish(); } }); //调用RecyAdapter里面的接口,设置全选按钮 总价 总数量 recyAdapter.setUpdateListener(new RecyAdapter.UpdateListener() { @Override public void setTotal(String total, String num, boolean allCheck) { //设置ui的改变 totalNum.setText("共" + num + "件商品");//总数量 totalPrice.setText("总价 :¥" + total + "元");//总价 if (allCheck) { quanxuan.setTag(2); quanxuan.setBackgroundResource(R.drawable.shopcart_selected); } else { quanxuan.setTag(1); quanxuan.setBackgroundResource(R.drawable.shopcart_unselected); } quanxuan.setChecked(allCheck); } }); //这里只做ui更改, 点击全选按钮,,调到adapter里面操作 quanxuan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //调用adapter里面的方法 ,,把当前quanxuan状态传递过去 int tag = (int) quanxuan.getTag(); if (tag == 1) { quanxuan.setTag(2); quanxuan.setBackgroundResource(R.drawable.shopcart_selected); } else { quanxuan.setTag(1); quanxuan.setBackgroundResource(R.drawable.shopcart_unselected); } recyAdapter.quanXuan(quanxuan.isChecked()); } }); //点击批量删除的按钮 shanchu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { recyAdapter.shanChu(); } }); //点击编辑按钮, bianji.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int tag = (int) bianji.getTag(); if (tag == 1) { bianji.setText("完成"); bianji.setTag(2); quzhifu.setVisibility(View.GONE); shanchu.setVisibility(View.VISIBLE); } else { bianji.setText("编辑"); bianji.setTag(1); quzhifu.setVisibility(View.VISIBLE); shanchu.setVisibility(View.GONE); } } }); } @Override public void success(queryBean queryBean) { if (queryBean != null) { //将返回的数据添加到适配器中 recyAdapter.add(queryBean); } } @Override public void failure() { System.out.println("网不好"); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "网有点慢", Toast.LENGTH_SHORT).show(); } }); } @Override protected void onDestroy() { super.onDestroy(); //解除绑定 queryPresenter.detach(); } }MainActivity适配器——RecyAdapter
public class RecyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements queryView, deleteView { queryPresenter queryPresenter; deletePresenter deletePresenter; Context context; //创建大的集合 private List<queryBean.DataBean.ListBean> list; //存放商家的id和商家的名称的map集合 private Map<String, String> map = new HashMap<>(); public RecyAdapter(MainActivity mainActivity) { this.context = mainActivity; queryPresenter = new queryPresenter(this); deletePresenter = new deletePresenter(this); //初始化Fresco Fresco.initialize(context); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.recy_cart_item, null); return new MyViewHolder(view); } @Override public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { /** * 设置商铺的 shop_checkbox和商铺的名字 显示或隐藏 * */ if (list.get(position).getIsFirst() == 1) { //显示商家 ((MyViewHolder) holder).shop_checkbox.setVisibility(View.VISIBLE); ((MyViewHolder) holder).shop_name.setVisibility(View.VISIBLE); //设置shop_checkbox的选中状态 ((MyViewHolder) holder).shop_checkbox.setChecked(list.get(position).isShop_check()); ((MyViewHolder) holder).shop_name.setText(map.get(String.valueOf(list.get(position).getSellerid())) + " >"); } else {//2 //隐藏商家 ((MyViewHolder) holder).shop_name.setVisibility(View.GONE); ((MyViewHolder) holder).shop_checkbox.setVisibility(View.GONE); } //拆分images字段 String[] split = list.get(position).getImages().split("\\|"); //设置商品的图片 ((MyViewHolder) holder).item_face.setImageURI(Uri.parse(split[0])); // ImageLoader.getInstance().displayImage(split[0],holder.item_face); //控制商品的item_checkbox,,根据字段改变 ((MyViewHolder) holder).item_checkbox.setChecked(list.get(position).isItem_check()); ((MyViewHolder) holder).item_name.setText(list.get(position).getTitle()); ((MyViewHolder) holder).item_price.setText(list.get(position).getPrice() + ""); //调用customjiajian里面的方法设置 加减号中间的数字 ((MyViewHolder) holder).customJiaJian.setEditText(list.get(position).getNum()); ((MyViewHolder) holder).item_bianji.setTag(1); //点击item编辑才显示 自定义加减框 ((MyViewHolder) holder).item_bianji.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int tag = (int) ((MyViewHolder) holder).item_bianji.getTag(); if (tag == 1) { //加减号显示 ((MyViewHolder) holder).item_bianji.setText("完成"); ((MyViewHolder) holder).customJiaJian.setVisibility(View.VISIBLE); //商品的名称隐藏 ((MyViewHolder) holder).item_name.setVisibility(View.GONE); ((MyViewHolder) holder).item_yansechima.setVisibility(View.VISIBLE); ((MyViewHolder) holder).item_price.setVisibility(View.GONE); ((MyViewHolder) holder).item_delete.setVisibility(View.VISIBLE); ((MyViewHolder) holder).item_bianji.setTag(2); } else { //相反的 隐藏的显示,显示的隐藏 //加减号显示 ((MyViewHolder) holder).item_bianji.setText("编辑"); ((MyViewHolder) holder).customJiaJian.setVisibility(View.GONE); //商品的名称隐藏 ((MyViewHolder) holder).item_name.setVisibility(View.VISIBLE); ((MyViewHolder) holder).item_yansechima.setVisibility(View.GONE); ((MyViewHolder) holder).item_price.setVisibility(View.VISIBLE); ((MyViewHolder) holder).item_delete.setVisibility(View.GONE); ((MyViewHolder) holder).item_bianji.setTag(1); } } }); //设置点击多选框 //商铺的shop_checkbox点击事件 ,控制商品的item_checkbox ((MyViewHolder) holder).shop_checkbox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //先改变数据源中的shop_check list.get(position).setShop_check(((MyViewHolder) holder).shop_checkbox.isChecked()); for (int i = 0; i < list.size(); i++) { //如果是同一家商铺的 都给成相同状态 if (list.get(position).getSellerid() == list.get(i).getSellerid()) { //当前条目的选中状态 设置成 当前商铺的选中状态 list.get(i).setItem_check(((MyViewHolder) holder).shop_checkbox.isChecked()); } } //刷新适配器 notifyDataSetChanged(); //调用求和的方法 sum(list); } }); //商品的item_checkbox点击事件,控制商铺的shop_checkbox ((MyViewHolder) holder).item_checkbox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //先改变数据源中的item_checkbox list.get(position).setItem_check(((MyViewHolder) holder).item_checkbox.isChecked()); //反向控制商铺的shop_checkbox for (int i = 0; i < list.size(); i++) { for (int j = 0; j < list.size(); j++) { //如果两个商品是同一家店铺的 并且 这两个商品的item_checkbox选中状态不一样 if (list.get(i).getSellerid() == list.get(j).getSellerid() && !list.get(j).isItem_check()) { //就把商铺的shop_checkbox改成false list.get(i).setShop_check(false); break; } else { //同一家商铺的商品 选中状态都一样,就把商铺shop_checkbox状态改成true list.get(i).setShop_check(true); } } } //更新适配器 notifyDataSetChanged(); //调用求和的方法 sum(list); } }); //删除条目的点击事件 ((MyViewHolder) holder).item_delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // list.remove(position);//移除集合中的当前数据 //删除完当前的条目 重新判断商铺的显示隐藏 int pid = list.get(position).getPid(); Map<String, String> mapDel = new HashMap<String, String>(); mapDel.put("uid", "4421"); mapDel.put("pid", pid + ""); APIFactory.getInstance().delete(mapDel, new Observer<deleteBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(deleteBean deleteBean) { String code = deleteBean.code; if (code.equals("0")) { Toast.makeText(context, "删除购物车成功", Toast.LENGTH_SHORT).show(); list.remove(position); setFirst(list); //调用重新求和 sum(list); notifyDataSetChanged(); } else if (code.equals("1")) { Toast.makeText(context, "天呢!商品id不能为空", Toast.LENGTH_SHORT).show(); } } }); } }); //加减号的监听, ((MyViewHolder) holder).customJiaJian.setCustomListener(new CustomJiaJian.CustomListener() { @Override public void jiajian(int count) { //改变数据源中的数量 list.get(position).setNum(count); notifyDataSetChanged(); sum(list); } @Override //输入值 求总价 public void shuRuZhi(int count) { list.get(position).setNum(count); notifyDataSetChanged(); sum(list); } }); } @Override public int getItemCount() { return list == null ? 0 : list.size(); } class MyViewHolder extends RecyclerView.ViewHolder { private final CheckBox shop_checkbox; private final TextView shop_name; private final CheckBox item_checkbox; private final TextView item_name; private final TextView item_price; private final CustomJiaJian customJiaJian; //private final ImageView item_delete; private final TextView item_delete; private final ImageView item_face; private final TextView item_bianji; private final TextView item_yansechima; public MyViewHolder(View itemView) { super(itemView); //拿到控件 shop_checkbox = (CheckBox) itemView.findViewById(R.id.shop_checkbox); shop_name = (TextView) itemView.findViewById(R.id.shop_name); item_checkbox = (CheckBox) itemView.findViewById(R.id.item_checkbox); item_name = (TextView) itemView.findViewById(R.id.item_name); item_price = (TextView) itemView.findViewById(R.id.item_price); customJiaJian = (CustomJiaJian) itemView.findViewById(R.id.custom_jiajian); //item_delete = (ImageView) itemView.findViewById(R.id.item_delete); item_delete = (TextView) itemView.findViewById(R.id.item_delete); item_face = (ImageView) itemView.findViewById(R.id.item_face); item_bianji = itemView.findViewById(R.id.item_bianji); item_yansechima = itemView.findViewById(R.id.item_yansechima); } } UpdateListener updateListener; public void setUpdateListener(UpdateListener updateListener) { this.updateListener = updateListener; } //view层调用这个方法, 点击quanxuan按钮的操作 public void quanXuan(boolean checked) { for (int i = 0; i < list.size(); i++) { list.get(i).setShop_check(checked); list.get(i).setItem_check(checked); } notifyDataSetChanged(); sum(list); } private void sum(List<queryBean.DataBean.ListBean> list) { int totalNum = 0; float totalMoney = 0.0f; boolean allCheck = true; for (int i = 0; i < list.size(); i++) { if (list.get(i).isItem_check()) { totalNum += list.get(i).getNum(); totalMoney += list.get(i).getNum() * list.get(i).getPrice(); } else { //如果有个未选中,就标记为false allCheck = false; } } //接口回调出去 把总价 总数量 和allcheck 传给view层 updateListener.setTotal(totalMoney + "", totalNum + "", allCheck); } //批量删除的按钮 public void shanChu() { //存储删除的id final List<Integer> delete_listid = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { if (list.get(i).isItem_check()) { //将要删除的pid添加到这个集合里 delete_listid.add(list.get(i).getPid()); } } if (delete_listid.size() == 0) { //如果没有要删除的,就吐司提示 Toast.makeText(context, "请选中至少一个商品后再删除", Toast.LENGTH_SHORT).show(); return; } //弹框 final AlertDialog.Builder dialog = new AlertDialog.Builder(context); dialog.setTitle("操作提示"); dialog.setMessage("你确定要删除这" + delete_listid.size() + "个商品?"); dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { //使用接口删除 String a = ""; for (int j = 0; j < delete_listid.size(); j++) { // a+=delete_listid.get(j)+""; Integer integer = delete_listid.get(j); String pid = String.valueOf(integer); deletePresenter.deleteFF(pid); // list.remove(j); } // Toast.makeText(context, a,Toast.LENGTH_SHORT).show(); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.cancel(); } }).create().show(); } public void add(queryBean queryBean) { if (list == null) { list = new ArrayList<>(); } if (queryBean != null) { for (queryBean.DataBean shop : queryBean.getData()) { map.put(shop.getSellerid(), shop.getSellerName()); //第二层遍历里面的商品 for (int i = 0; i < shop.getList().size(); i++) { //添加到list集合里 list.add(shop.getList().get(i)); } } //调用方法 设置显示或隐藏 商铺名 setFirst(list); } notifyDataSetChanged(); } /** * 设置数据源,控制是否显示商家 */ private void setFirst(List<queryBean.DataBean.ListBean> list) { if (list.size() > 0) { list.get(0).setIsFirst(1); //从第二条开始遍历 for (int i = 1; i < list.size(); i++) { //如果和前一个商品是同一家商店的 if (list.get(i).getSellerid() == list.get(i - 1).getSellerid()) { //设置成2不显示商铺 list.get(i).setIsFirst(2); } else {//设置成1显示商铺 list.get(i).setIsFirst(1); //如果当前条目选中,把当前的商铺也选中 if (list.get(i).isItem_check() == true) { list.get(i).setShop_check(list.get(i).isItem_check()); } } } } } @Override public void success(queryBean queryBean) { list.clear(); add(queryBean); } @Override public void success(deleteBean deleteBean) { queryPresenter.queryFF(); } @Override public void failure() { System.out.println("网不好"); Toast.makeText(context, "adapter网有点慢", Toast.LENGTH_SHORT).show(); } //接口 public interface UpdateListener { public void setTotal(String total, String num, boolean allCheck); } }
public class XQActivity extends AppCompatActivity implements ViewCallBack { @Bind(R.id.GWC) TextView GWC; @Bind(R.id.XQ_Recy) RecyclerView XQRecy; private com.example.shoppingcar.presenter.cartPresenter cartPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_xq); ButterKnife.bind(this); cartPresenter = new cartPresenter(this); cartPresenter.cartFF(); } @OnClick(R.id.GWC) public void onViewClicked() { startActivity(new Intent(XQActivity.this, MainActivity.class)); finish(); } @Override public void success(CartBean cartBean) { List<CartBean.DataBean> data = cartBean.data; XQRecy.setLayoutManager(new LinearLayoutManager(this)); XQRecy.setAdapter(new XQAdapter(this, data)); } @Override public void failure(Exception e) { } @Override protected void onDestroy() { super.onDestroy(); cartPresenter.detach(); } }适配器
public class XQAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { Context context; List<CartBean.DataBean> data; public XQAdapter(XQActivity xqActivity, List<CartBean.DataBean> data) { this.context = xqActivity; this.data = data; Fresco.initialize(context); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.xqitem, null); return new XQViewHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { //拆分images字段 String[] split = data.get(position).images.split("\\|"); //设置商品的图片 ((XQViewHolder) holder).img.setImageURI(Uri.parse(split[0])); ((XQViewHolder) holder).name.setText(data.get(position).title); ((XQViewHolder) holder).price.setText(data.get(position).price + ""); ((XQViewHolder) holder).btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int pid = data.get(position).pid; Map<String, String> map = new HashMap<String, String>(); map.put("uid", "4421"); map.put("pid", pid + ""); APIFactory.getInstance().add(map, new Observer<addBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(addBean addBean) { String code = addBean.code; if (code.equals("0")) { Toast.makeText(context, "加购成功", Toast.LENGTH_SHORT).show(); } else if (code.equals("1")) { Toast.makeText(context, "天呢!用户未登录或用户id不能为空", Toast.LENGTH_SHORT).show(); } } }); } }); } @Override public int getItemCount() { return data.size(); } class XQViewHolder extends RecyclerView.ViewHolder { private final SimpleDraweeView img; private final TextView name; private final TextView price; private final Button btn; public XQViewHolder(View itemView) { super(itemView); img = itemView.findViewById(R.id.xq_fresco); name = itemView.findViewById(R.id.xq_name); price = itemView.findViewById(R.id.xq_price); btn = itemView.findViewById(R.id.xq_btn); } } }MVP
public class MyModel { public void cart(final ModelCallBack modelCallBack) { Map<String, String> map = new HashMap<>(); map.put("keywords", "手机"); APIFactory.getInstance().cart(map, new Observer<CartBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(CartBean cartBean) { modelCallBack.success(cartBean); } }); } }public interface ModelCallBack { void success(CartBean cartBean); void failure(Exception e); }public interface ViewCallBack { void success(CartBean cartBean); void failure(Exception e); }public class cartPresenter { ViewCallBack viewCallBack; MyModel myModel; public cartPresenter(ViewCallBack viewCallBack) { this.viewCallBack = viewCallBack; this.myModel = new MyModel(); } public void cartFF() { myModel.cart(new ModelCallBack() { @Override public void success(CartBean cartBean) { viewCallBack.success(cartBean); } @Override public void failure(Exception e) { } }); } public void detach() { this.viewCallBack = null; } }bean
public class CartBean { public String msg; public String code; public String page; public List<DataBean> data; public static class DataBean { public double bargainPrice; public String createtime; public String detailUrl; public String images; public int itemtype; public int pid; public double price; public int pscid; public int salenum; public int sellerid; public String subhead; public String title; } }删除的MVP+bean
public class deleteModel { public void delete(String pid, final deleteModelCallBack deleteBack) { Map<String, String> map = new HashMap<>(); map.put("uid", "uid"); map.put("pid", pid); APIFactory.getInstance().delete(map, new Observer<deleteBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(deleteBean deleteBean) { deleteBack.success(deleteBean); } }); } }public interface deleteModelCallBack { void success(deleteBean deleteBean); void failure(); }public interface deleteView { void success(deleteBean deleteBean); void failure(); }public class deletePresenter { deleteModel deleteModel; deleteView deleteView; public deletePresenter(com.example.shoppingcar.view.deleteView deleteView) { this.deleteView = deleteView; this.deleteModel = new deleteModel(); } public void deleteFF(String pid) { deleteModel.delete(pid, new deleteModelCallBack() { @Override public void success(deleteBean deleteBean) { deleteView.success(deleteBean); } @Override public void failure() { } }); } }bean
public class deleteBean { /** * msg : 删除购物车成功 * code : 0 */ public String msg; public String code; }查询的MVP+bean
public class queryModel { public void query(final queryModelCallBack queryBack) { Map<String, String> map = new HashMap<>(); map.put("uid", "4421"); APIFactory.getInstance().query(map, new Observer<queryBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(queryBean queryBean) { queryBack.success(queryBean); } }); } }public interface queryModelCallBack { void success(queryBean queryBean); void failure(); }public interface queryView { void success(queryBean queryBean); void failure(); }public class queryPresenter { queryView queryView; queryModel queryModel; public queryPresenter(queryView queryView) { this.queryView = queryView; this.queryModel = new queryModel(); } public void queryFF() { queryModel.query(new queryModelCallBack() { @Override public void success(queryBean queryBean) { queryView.success(queryBean); } @Override public void failure() { } }); } public void detach() { this.queryView = null; } }bean
public class queryBean { private String msg; private String code; private List<DataBean> data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { private String sellerName; private String sellerid; private List<ListBean> list; 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<ListBean> getList() { return list; } public void setList(List<ListBean> list) { this.list = list; } public static class ListBean { private double bargainPrice; private String createtime; private String detailUrl; private String images; private int num; private int pid; private double price; private int pscid; private int selected; private int sellerid; private String subhead; private String title; private int isFirst = 1;//1为显示商铺, 2为隐藏商铺 private boolean item_check;//每个商品的选中状态 private boolean shop_check;//商店的选中状态 public int getIsFirst() { return isFirst; } public void setIsFirst(int isFirst) { this.isFirst = isFirst; } public boolean isItem_check() { return item_check; } public void setItem_check(boolean item_check) { this.item_check = item_check; } public boolean isShop_check() { return shop_check; } public void setShop_check(boolean shop_check) { this.shop_check = shop_check; } 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(String images) { this.images = images; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getPscid() { return pscid; } public void setPscid(int pscid) { this.pscid = pscid; } public int getSelected() { return selected; } public void setSelected(int selected) { this.selected = selected; } 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; } } } }addBean
public class addBean { /** * msg : 加购成功 * code : 0 */ public String msg; public String code; }