依赖:
compile 'com.squareup.okhttp3:okhttp:3.3.0' compile 'com.google.code.gson:gson:2.2.4' compile 'com.squareup.okio:okio:1.5.0' compile 'com.github.bumptech.glide:glide:3.6.1'
权限:
<uses-permission android:name="android.permission.INTERNET" />
HTTP包:
package com.example.administrator.xiaoshixun_gouwuche.Http; import android.os.Handler; import android.os.Message; import java.io.IOException; import java.util.Map; import java.util.Set; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; /** * ok工具类 */ public class OkHttpUtils { private static OkHttpUtils okHttpUtils = null; private MyHandler myHandler = new MyHandler(); private OkLoadListener okLoadListener; //单例 public static OkHttpUtils getInstance() { if (okHttpUtils == null) { okHttpUtils = new OkHttpUtils(); } return okHttpUtils; } //get public void okGet(String url) { OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyInter()).build(); Request request = new Request.Builder().url(url).build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Message message = myHandler.obtainMessage(); message.what = 0; message.obj = e.getMessage(); myHandler.sendMessage(message); } @Override public void onResponse(Call call, Response response) throws IOException { Message message = myHandler.obtainMessage(); message.what = 1; message.obj = response.body().string(); myHandler.sendMessage(message); } }); } //post public void okPost(String url, Map<String, String> map) { OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyInter()).build(); //创建FormBody FormBody.Builder builder = new FormBody.Builder(); //遍历map Set<String> keys = map.keySet(); for (String key : keys) { String value = map.get(key); builder.add(key, value+""); } //build FormBody body = builder.build(); Request request = new Request.Builder().url(url).post(body).build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Message message = myHandler.obtainMessage(); message.what = 0; message.obj = e.getMessage(); myHandler.sendMessage(message); } @Override public void onResponse(Call call, Response response) throws IOException { Message message = myHandler.obtainMessage(); message.what = 1; message.obj = response.body().string(); myHandler.sendMessage(message); } }); } //拦截器 class MyInter implements Interceptor { private static final String TAG = "MyInter"; @Override public Response intercept(Chain chain) throws IOException { //获取原来的body Request request = chain.request(); RequestBody body = request.body(); if (body instanceof FormBody) { //遍历原来的所有参数,加到新的Body里面,最后将公共参数加到新的Body FormBody.Builder newBuilder = new FormBody.Builder(); for (int i = 0; i < ((FormBody) body).size(); i++) { String name = ((FormBody) body).name(i); String value = ((FormBody) body).value(i); //放入新的 newBuilder.add(name, value); } //在将公共参数添加进去 newBuilder.add("source", "android"); FormBody newBody = newBuilder.build(); //创建新的请求 Request newRequest = request.newBuilder().post(newBody).build(); Response response = chain.proceed(newRequest); return response; } return null; } } //handler class MyHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0: //失败 String e = (String) msg.obj; okLoadListener.okLoadError(e); break; case 1: //成功 String json = (String) msg.obj; okLoadListener.okLoadSuccess(json); break; } } } //提高外部调用的接口 public void setOkLoadListener(OkLoadListener okLoadListener) { this.okLoadListener = okLoadListener; } }
-------------接口-------------
public class HttpConfig { public static String detail_url = "https://www.zhaoapi.cn/product/getProductDetail"; public static String add_url = "https://www.zhaoapi.cn/product/addCart"; public static String cartList_url = "https://www.zhaoapi.cn/product/getCarts"; }
------------网络监听----------
public interface OkLoadListener { void okLoadSuccess(String json); void okLoadError(String error); }
IMODEL包:
-----------IModel----------
public interface IModel { //获取详情界面的数据 void getDetailData(String url, Map<String,String> parms,DetailLoadLister detailLoadLister); //展示购物车界面 void showDataToCart(String url,Map<String,String> parms,CartListLoadListener cartListLoadListener); //计算总价 double calcaulate(CartBean cartBean); }
-----------IModel实现类----------
import android.util.Log; import com.example.administrator.xiaoshixun_gouwuche.Http.OkHttpUtils; import com.example.administrator.xiaoshixun_gouwuche.Http.OkLoadListener; import com.example.administrator.xiaoshixun_gouwuche.bean.CartBean; import java.util.List; import java.util.Map; /** * Model实现类 */ public class ModelImpl implements IModel { //加载详情界面 @Override public void getDetailData(String url, Map<String, String> parms, final DetailLoadLister detailLoadLister) { OkHttpUtils ok = new OkHttpUtils(); //用OkHttp请求,之后调用接口 ok.okPost(url,parms); ok.setOkLoadListener(new OkLoadListener() { @Override public void okLoadSuccess(String json) { //获取成功 detailLoadLister.detailLoadSuccess(json); } @Override public void okLoadError(String error) { //获取失败 detailLoadLister.detailLoadError(error); } }); } //展示购物车的数据 private static final String TAG = "ModelImpl"; @Override public void showDataToCart(String url, Map<String, String> parms, final CartListLoadListener cartListLoadListener) { OkHttpUtils ok = new OkHttpUtils(); ok.okPost(url,parms); ok.setOkLoadListener(new OkLoadListener() { @Override public void okLoadSuccess(String json) { Log.d(TAG, "okLoadSuccess: "+json); cartListLoadListener.loadCartSuccess(json); } @Override public void okLoadError(String error) { cartListLoadListener.loadCartError(error); } }); } //计算总价 @Override public double calcaulate(CartBean cartBean) { double sum = 0; Log.d(TAG, "总价:"+cartBean+"====="+cartBean.getData()); List<CartBean.DataBean> data = cartBean.getData(); //遍历主布局 for (int i = 0; i < data.size(); i++) { List<CartBean.ChildBean> list = data.get(i).getList(); for (int j = 0; j < list.size(); j++) { //如果为选择状态 if (list.get(j).isChildIsSelected()) { //获取价格 double bargainPrice = list.get(j).getBargainPrice(); //赋值给sum sum+=bargainPrice; } } } return sum; } }---------加载详情页监听---------
public interface DetailLoadLister { void detailLoadSuccess(String json); void detailLoadError(String error); }
-------加载购物车界面监听
public interface CartListLoadListener { //购物车数据,加载成功 void loadCartSuccess(String json); //加载失败 void loadCartError(String error); }
Precenter:
public interface IPrecenter { //将数据展示到详情界面 void showDataToDetai(IModel iModel, IMainView iMainView); //展示购物车数据 void showDataToCart(Context context,IModel iModel, ICartView iCartView); //计算的方法 void jiSuan(IModel iModel, CartBean cartBean,ICartView iCartView); }--------------Precenter实现类----------
public class PrecenterImpl implements IPrecenter { private static final String TAG = "PrecenterImpl"; //展示数据到详情界面的方法 @Override public void showDataToDetai(IModel iModel, final IMainView iMainView) { Map<String,String> prams = new HashMap<String,String>(); prams.put("pid","17"); iModel.getDetailData(HttpConfig.detail_url, prams, new DetailLoadLister() { @Override public void detailLoadSuccess(String json) { Log.d(TAG, "detailLoadSuccess: "+json); //解析数据 Gson gson = new Gson(); DetailBean detailBean = gson.fromJson(json, DetailBean.class); iMainView.showDetailData(detailBean); } @Override public void detailLoadError(String error) { Log.d(TAG, "detailLoadError: "+"数据请求失败"); } }); } //展示购物车数据 @Override public void showDataToCart(final Context context, IModel iModel, final ICartView iCartView) { Map<String,String> map = new HashMap<String,String>(); map.put("uid","71"); iModel.showDataToCart(HttpConfig.cartList_url, map, new CartListLoadListener() { @Override public void loadCartSuccess(String json) { Log.d(TAG, "购物车数据: "+json); Gson gson = new Gson(); CartBean cartBean = gson.fromJson(json, CartBean.class); iCartView.showDataToCart(context,cartBean); } @Override public void loadCartError(String error) { Log.d(TAG, "loadCartError: "+"失败"); } }); } //计算总价 @Override public void jiSuan(IModel iModel, CartBean cartBean, ICartView iCartView) { Log.d(TAG, "计算: "+iCartView.getCartBean()); //调用model计算总价的方法 double sum = iModel.calcaulate(cartBean); //数据给view iCartView.showSum(sum); }
Iview:
------------IMainView-----------
public interface IMainView { //展示详情数据的方法 void showDetailData(DetailBean detailBean); }-----------Maintiviy--------------
public class MainActivity extends AppCompatActivity implements IMainView,View.OnClickListener { private PrecenterImpl precenter; private ImageView main_big_pic; private TextView man_name; private TextView main_price; private TextView main_price2; private DetailBean detailBean; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 initViews(); //回调 precenter = new PrecenterImpl(); precenter.showDataToDetai(new ModelImpl(),this); } private void initViews() { main_big_pic = findViewById(R.id.main_big_pic); man_name = findViewById(R.id.main_name); main_price = findViewById(R.id.main_price); main_price2 = findViewById(R.id.main_price2); TextView main_cart = findViewById(R.id.main_cart); TextView main_add = findViewById(R.id.main_add); main_cart.setOnClickListener(this); main_add.setOnClickListener(this); } //展示详情数据 @Override public void showDetailData(DetailBean detailBean) { this.detailBean = detailBean; String images = detailBean.getData().getImages(); String imgurl = images.split(".jpg")[0] + ".jpg"; //设置图片 Glide.with(MainActivity.this).load(imgurl).into(main_big_pic); man_name.setText(detailBean.getData().getTitle()); //原价 main_price.setText(detailBean.getData().getPrice()+""); //删除线 main_price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); //优惠价 main_price2.setText("折扣价" + detailBean.getData().getBargainPrice() + ""); } //按钮事件 @Override public void onClick(View view) { switch(view.getId()){ case R.id.main_cart: //调用跳转 startActivity(new Intent(MainActivity.this,CartActivity.class)); break; case R.id.main_add: //添加购物车 break; } } }------------Maintivity布局----------
<?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-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.gjl.yuekaolianxi.view.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:id="@+id/back" android:layout_width="30dp" android:layout_height="30dp" android:background="@mipmap/ic_launcher"/> <TextView android:textSize="20sp" android:id="@+id/main_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="商品详情"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="0.75dp" android:background="#F00"/> <ImageView android:layout_marginTop="80dp" android:id="@+id/main_big_pic" android:layout_width="match_parent" android:layout_height="300dp" android:scaleType="centerCrop" android:src="@mipmap/ic_launcher"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical"> <TextView android:textSize="30sp" android:id="@+id/main_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="商品名"/> <TextView android:textSize="30sp" android:textColor="#F00" android:id="@+id/main_price" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="原价"/> <TextView android:textSize="30sp" android:id="@+id/main_price2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="折扣价"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="0.75dp" android:background="#F00"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:orientation="horizontal"> <TextView android:textSize="30sp" android:id="@+id/main_cart" android:layout_width="0dp" android:layout_height="30dp" android:layout_weight="1" android:clickable="true" android:gravity="center" android:text="购物车"/> <View android:layout_width="0.75dp" android:layout_height="match_parent" android:background="#F00"/> <TextView android:textSize="30sp" android:id="@+id/main_add" android:layout_width="0dp" android:layout_height="30dp" android:layout_weight="1" android:clickable="true" android:gravity="center" android:text="加入购物车"/> </LinearLayout> </LinearLayout>---------------ICartView-----------
public interface ICartView { //显示数据 void showDataToCart(Context context, CartBean cartBean); //调用bean类 CartBean getCartBean(); //显示总价 void showSum(double sum); }
--------------Carttivity--------------
public class CartActivity extends AppCompatActivity implements ICartView, View.OnClickListener { private ExpandableListView ex_list_view; private CheckBox cart_cb; private TextView cart_sum; private CartBean cartBean; private Myadpater md; private static final String TAG = "CartActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cart); //初始化控件 initViews(); //回调 PrecenterImpl precenter = new PrecenterImpl(); precenter.showDataToCart(this, new ModelImpl(), this); } private void initViews() { ex_list_view = findViewById(R.id.ex_list_view); cart_cb = findViewById(R.id.cart_cb); cart_sum = findViewById(R.id.cart_sum12); //全选、反选的点击事件 cart_cb.setOnClickListener(this); } //展示购物车界面 @Override public void showDataToCart(Context context, CartBean cartBean) { //提升作用域用作传值 this.cartBean = cartBean; Log.d(TAG, "showDataToCart: "+cartBean.getData().get(0).toString()); //添加适配 md = new Myadpater(context, cartBean, cartBean.getData(), this); ex_list_view.setAdapter(md); //将expanablelistview全部展开 int groupCount = md.getGroupCount(); for (int i = 0; i < groupCount; i++) { ex_list_view.expandGroup(i); } } //获取CarBean @Override public CartBean getCartBean() { return cartBean; } //显示总价 @Override public void showSum(double sum) { Log.d(TAG, "showSum() returned: " + sum + "--" + cart_sum); TextView tv = findViewById(R.id.cart_sum12); tv.setText("总价:" + sum); } //点击事件/全选/反选 @Override public void onClick(View view) { switch (view.getId()) { case R.id.cart_cb: //全部置为反 List<CartBean.DataBean> data = cartBean.getData(); for (int i = 0; i < data.size(); i++) { data.get(i).setParentIsSelected(!data.get(i).isParentIsSelected()); //子元素 List<CartBean.ChildBean> list = data.get(i).getList(); for (int j = 0; j < list.size(); j++) { list.get(j).setChildIsSelected(!list.get(j).isChildIsSelected()); } } //通知刷新 md.notifyDataSetChanged(); //回调 PrecenterImpl precenter = new PrecenterImpl(); precenter.jiSuan(new ModelImpl(),cartBean,this); break; } } }
-----------------Cartvitity布局--------------
<?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-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.gjl.yuekaolianxi.view.CartActivity"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="购物车" android:textColor="@android:color/black" android:textSize="25sp"/> <View android:layout_width="match_parent" android:layout_height="0.75dp" android:background="#999999"/> <ExpandableListView android:id="@+id/ex_list_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:groupIndicator="@null"></ExpandableListView> <View android:layout_width="match_parent" android:layout_height="0.75dp" android:background="#999999"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <CheckBox android:id="@+id/cart_cb" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="全选/反选" android:textColor="@android:color/black" android:textSize="25sp"/> <TextView android:id="@+id/cart_sum12" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="总价:0" android:textColor="@android:color/black" android:textSize="25sp"/> </LinearLayout> </LinearLayout>
----------动画acitivity-----------
public class AnimatorActivity extends AppCompatActivity { private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_animator); //初始化控件 initViews(); } private void initViews() { imageView = (ImageView) findViewById(R.id.img); //调用动画工具类 AnimatorSet set = AnimatorUtils.setAnimatorSet(AnimatorActivity.this, imageView); //动画的事件 set.addListener(new AnimatorListenerAdapter() { @Override //动画结束后的方法 public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); startActivity(new Intent(AnimatorActivity.this,MainActivity.class)); //加跳转动画 overridePendingTransition(R.anim.enter,R.anim.out); //结束关掉本页 finish(); } }); } }
-----------------动画布局--------------
<?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-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_horizontal" tools:context="com.example.administrator.xiaoshixun_gouwuche.View.AnimatorActivity"> <ImageView android:src="@mipmap/ic_launcher" android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
--------------动画工具类--------------
/** * 动画工具类 */ public class AnimatorUtils { public static AnimatorSet setAnimatorSet(Context context, View view) { //获取屏幕的一半 DisplayMetrics metrics = context.getResources().getDisplayMetrics(); //获取高度 int heightPixels = metrics.heightPixels; //设置动画 ObjectAnimator translationY = ObjectAnimator.ofFloat(view, "translationY", 0, heightPixels / 2 - view.getHeight()); ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 2.0f, 1.0f); ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 2.0f, 1.0f); ObjectAnimator alpha = ObjectAnimator.ofFloat(view, "alpha", 0, 1.0f);//透明 ObjectAnimator rotation = ObjectAnimator.ofFloat(view, "rotation", 0, 360);//旋转 //创建动画集合 AnimatorSet set = new AnimatorSet(); set.playTogether(translationY,scaleX,scaleY,alpha,rotation); set.setDuration(3000); set.start();//开启动画 return set; } }----------跳转动画界面anim文件-------------<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:fromXDelta="100%" android:toXDelta="0%"> </translate><?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:fromXDelta="0%" android:toXDelta="-100%"> </translate>---------------适配器---------------public class Myadpater extends BaseExpandableListAdapter { private final Context context; private final CartBean cartBean; private final List<CartBean.DataBean> list; private final ICartView iCartView; //有参构造 public Myadpater(Context context, CartBean cartBean, List<CartBean.DataBean> list, ICartView iCartView) { this.context = context; this.cartBean = cartBean; this.list = list; this.iCartView = iCartView; } @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 false; } @Override public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) { ParetViewHolder paretViewHolder = null; if (view == null) { //获取布局 view = LayoutInflater.from(context).inflate(R.layout.layout_parent, null); //获取控件 CheckBox parent_cb = view.findViewById(R.id.parent_cb); TextView parent_tv = view.findViewById(R.id.parent_tv); //放到优化当中 paretViewHolder = new ParetViewHolder(parent_cb,parent_tv); view.setTag(paretViewHolder); }else{ paretViewHolder = (ParetViewHolder) view.getTag(); } //赋值 paretViewHolder.getParent_cb().setChecked(list.get(i).isParentIsSelected()); paretViewHolder.getParent_tv().setText(list.get(i).getSellerName()); //点击事件 paretViewHolder.getParent_cb().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean isSelected = list.get(i).isParentIsSelected(); isSelected =!isSelected; list.get(i).setParentIsSelected(isSelected); //遍历子元素,全部设置成true List<CartBean.ChildBean> list = Myadpater.this.list.get(i).getList(); for (int j = 0; j<list.size();j++){ list.get(j).setChildIsSelected(isSelected); } //通知界面 notifyDataSetChanged(); //回调计算的方法 PrecenterImpl presenter = new PrecenterImpl(); presenter.jiSuan(new ModelImpl(),cartBean,iCartView); } }); return view; } @Override public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) { ChildeViewHolder childeViewHolder = null; if (view == null) { view = LayoutInflater.from(context).inflate(R.layout.layout_child, null); CheckBox child_cb = view.findViewById(R.id.child_cb); ImageView child_img = view.findViewById(R.id.child_img); TextView child_title = view.findViewById(R.id.child_title); TextView child_price = view.findViewById(R.id.child_price); childeViewHolder = new ChildeViewHolder(child_cb, child_img, child_title, child_price); view.setTag(childeViewHolder); } else { childeViewHolder = (ChildeViewHolder) view.getTag(); } //赋值 childeViewHolder.getChild_cb().setChecked(list.get(i).getList().get(i1).isChildIsSelected()); //获取图的地址 String images = list.get(i).getList().get(i1).getImages(); String imageUrl = images.split(".jpg")[0] + ".jpg"; Glide.with(context).load(imageUrl).into(childeViewHolder.getChild_imge()); childeViewHolder.getChild_title().setText(list.get(i).getList().get(i1).getTitle()); childeViewHolder.getChild_price().setText(list.get(i).getList().get(i1).getBargainPrice() + ""); //字条目中的checkbox点击状态 //点击事件 childeViewHolder.getChild_cb().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean isCheked = list.get(i).getList().get(i1).isChildIsSelected(); isCheked = !isCheked; list.get(i).getList().get(i1).setChildIsSelected(isCheked); //遍历 List<CartBean.ChildBean> list1 = Myadpater.this.list.get(i).getList(); boolean flag = true; for (int i = 0; i < list1.size(); i++) { if (!list1.get(i).isChildIsSelected()) { flag = false; } } list.get(i).setParentIsSelected(flag); //通知改变 notifyDataSetChanged(); //计算 //计算 PrecenterImpl presenter = new PrecenterImpl(); presenter.jiSuan(new ModelImpl(), cartBean, iCartView); } }); return view; } @Override public boolean isChildSelectable(int i, int i1) { return false; } //优化一级列表 class ParetViewHolder{ public CheckBox parent_cb; public TextView parent_tv; public ParetViewHolder(CheckBox parent_cb, TextView parent_tv) { this.parent_cb = parent_cb; this.parent_tv = parent_tv; } //setget方法 public CheckBox getParent_cb() { return parent_cb; } public TextView getParent_tv() { return parent_tv; } public void setParent_cb(CheckBox parent_cb) { this.parent_cb = parent_cb; } public void setParent_tv(TextView parent_tv) { this.parent_tv = parent_tv; } } //优化二级列表 class ChildeViewHolder { public CheckBox child_cb; public ImageView child_imge; public TextView child_title; public TextView child_price; public ChildeViewHolder(CheckBox child_cb, ImageView child_imge, TextView child_title, TextView child_price) { this.child_cb = child_cb; this.child_imge = child_imge; this.child_title = child_title; this.child_price = child_price; } public CheckBox getChild_cb() { return child_cb; } public void setChild_cb(CheckBox child_cb) { this.child_cb = child_cb; } public ImageView getChild_imge() { return child_imge; } public void setChild_imge(ImageView child_imge) { this.child_imge = child_imge; } public TextView getChild_title() { return child_title; } public void setChild_title(TextView child_title) { this.child_title = child_title; } public TextView getChild_price() { return child_price; } public void setChild_price(TextView child_price) { this.child_price = child_price; } } }Bean类:----------详情bean-------public class CartBean { 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 { //添加一boolean,记录选中状态 private boolean parentIsSelected; public DataBean(boolean parentIsSelected, String sellerName, String sellerid, List<ChildBean> list) { this.parentIsSelected = parentIsSelected; this.sellerName = sellerName; this.sellerid = sellerid; this.list = list; } public boolean isParentIsSelected() { return parentIsSelected; } public void setParentIsSelected(boolean parentIsSelected) { this.parentIsSelected = parentIsSelected; } private String sellerName; private String sellerid; private List<ChildBean> 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<ChildBean> getList() { return list; } public void setList(List<ChildBean> list) { this.list = list; } } public class ChildBean { private double bargainPrice; private String createtime; private String detailUrl; private String images; private double num; private double pid; private double price; private double pscid; private double selected; private double sellerid; private String subhead; private String title; private boolean childIsSelected; public ChildBean(double bargainPrice, String createtime, String detailUrl, String images, double num, double pid, double price, double pscid, double selected, double sellerid, String subhead, String title, boolean childIsSelected) { this.bargainPrice = bargainPrice; this.createtime = createtime; this.detailUrl = detailUrl; this.images = images; this.num = num; this.pid = pid; this.price = price; this.pscid = pscid; this.selected = selected; this.sellerid = sellerid; this.subhead = subhead; this.title = title; this.childIsSelected = childIsSelected; } public boolean isChildIsSelected() { return childIsSelected; } public void setChildIsSelected(boolean childIsSelected) { this.childIsSelected = childIsSelected; } 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 double getNum() { return num; } public void setNum(double num) { this.num = num; } public double getPid() { return pid; } public void setPid(double pid) { this.pid = pid; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public double getPscid() { return pscid; } public void setPscid(double pscid) { this.pscid = pscid; } public double getSelected() { return selected; } public void setSelected(double selected) { this.selected = selected; } public double getSellerid() { return sellerid; } public void setSellerid(double 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; } } }-----------Cartbean---------public class DetailBean { /** * msg : * seller : {"description":"我是商家17","icon":"http://120.27.23.105/images/icon.png","name":"商家17","productNums":999,"score":5,"sellerid":17} * code : 0 * data : {"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":1,"pid":1,"price":118,"pscid":1,"salenum":0,"sellerid":17,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"} */ private String msg; private SellerBean seller; private String code; private DataBean data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public SellerBean getSeller() { return seller; } public void setSeller(SellerBean seller) { this.seller = seller; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public DataBean getData() { return data; } public void setData(DataBean data) { this.data = data; } public static class SellerBean { /** * description : 我是商家17 * icon : http://120.27.23.105/images/icon.png * name : 商家17 * productNums : 999 * score : 5 * sellerid : 17 */ private String description; private String icon; private String name; private int productNums; private int score; private int sellerid; public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getProductNums() { return productNums; } public void setProductNums(int productNums) { this.productNums = productNums; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public int getSellerid() { return sellerid; } public void setSellerid(int sellerid) { this.sellerid = sellerid; } } public static class DataBean { /** * bargainPrice : 111.99 * createtime : 2017-10-14T21:39:05 * detailUrl : https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends * images : https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg * itemtype : 1 * pid : 1 * price : 118 * pscid : 1 * salenum : 0 * sellerid : 17 * subhead : 每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下 * title : 北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g */ private double bargainPrice; private String createtime; private String detailUrl; private String images; private int itemtype; private int pid; private int price; private int pscid; private int salenum; private int sellerid; private String subhead; private String title; 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 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 int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public int getPscid() { return pscid; } public void setPscid(int pscid) { this.pscid = pscid; } public int getSalenum() { return salenum; } public void setSalenum(int salenum) { this.salenum = salenum; } 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; } } }