视频播放+详情页+购物车
//依赖
compile 'io.reactivex.rxjava2:rxjava:2.0.7' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.squareup.retrofit2:converter-scalars:2.1.0' compile 'com.jakewharton:butterknife:8.8.1' compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' compile 'com.facebook.fresco:fresco:0.12.0' compile 'com.github.bumptech.glide:glide:3.7.0' compile 'org.greenrobot:eventbus:3.1.1' compile 'com.android.support:design:26.0.0-alpha1' compile 'com.dou361.ijkplayer:jjdxm-ijkplayer:1.0.5' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
//权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
public class MainActivity extends AppCompatActivity implements XQpresenter.IXiangQingView, AddCartPrestener.IAddCartView {@BindView(R.id.simpleDetails)SimpleDraweeView simpleDetails; @BindView(R.id.title)TextView title; @BindView(R.id.price)TextView price; @BindView(R.id.addCart)Button addCart; private PlayerView play; @BindView(R.id.lj)Button lj; private XQpresenter xQpresenter; private AddCartPrestener addCartPresenter; private String pid; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); pid = getIntent().getStringExtra("pid"); xQpresenter = new XQpresenter(this); xQpresenter.getData("10"); addCartPresenter = new AddCartPrestener(this); String url = "http://mirror.aarnet.edu.au/pub/TED-talks/911Mothers_2010W-480p.mp4"; play = new PlayerView(this).setTitle("什么").setScaleType(PlayStateParams.fitparent).hideMenu(true).forbidTouch(false).setPlaySource(url); play.startPlay(); }@Override public void success(XiangQingBean.DataBean list) {//设置数据 String[] split = list.getImages().split("\\|"); simpleDetails.setImageURI(Uri.parse(split[0])); title.setText(list.getTitle()); price.setText(list.getPrice() + ""); }@Override public void success(String s) {String ss = s; if (s.equals("加购成功")) {Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show(); } else {Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show(); }}@Override protected void onStop() {super.onStop(); play.stopPlay(); }//销毁 @Override protected void onDestroy() {super.onDestroy(); xQpresenter.detach(); }@OnClick({R.id.addCart, R.id.lj})public void onClick(View v) {switch (v.getId()) {default:break; case R.id.addCart:addCartPresenter.getData("2"); break; case R.id.lj:Intent intent = new Intent(MainActivity.this, ShopCartActivity.class); intent.putExtra("pid", 2); startActivity(intent); break; }} }
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:orientation="vertical"> <include layout="@layout/simple_player_view_player" android:layout_width="match_parent" android:layout_height="300dp" /> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/simpleDetails" android:layout_width="match_parent" android:layout_height="200dp" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="标题" android:textSize="20sp" /> <TextView android:id="@+id/price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="价格" android:textColor="#FEB016" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_weight="1" android:orientation="horizontal"> <ImageView android:layout_width="0dp" android:layout_height="30dp" android:layout_weight="1" android:src="@mipmap/ic_launcher" /> <ImageView android:layout_width="0dp" android:layout_height="30dp" android:layout_weight="1" android:src="@mipmap/ic_launcher" /> <ImageView android:layout_width="0dp" android:layout_height="30dp" android:layout_weight="1" android:src="@mipmap/ic_launcher" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="25dp" android:layout_weight="1" android:orientation="horizontal"> <Button android:id="@+id/addCart" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ff0" android:text="加入购物车" android:textColor="#fff" /> <Button android:layout_weight="1" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#f00" android:text="立即购买" android:id="@+id/lj" android:textColor="#fff" /> </LinearLayout> </LinearLayout>
public interface ApiService {@GET Observable<String> get(@Url String url, @QueryMap Map<String, String> map); @FormUrlEncoded @POST Observable<String> post(@Url String url, @FieldMap Map<String, String> map); }
public abstract class BaseObserver<T> implements Observer<String> {@Override public void onSubscribe(Disposable d) {}@Override public void onNext(String s) {try {Type genType = getClass().getGenericSuperclass(); Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); Class entityClass = (Class) params[0]; Gson gson = new Gson(); T t = (T) gson.fromJson(s, entityClass); success(t); } catch (Exception e) {failure(1001); e.printStackTrace(); }}@Override public void onError(Throwable e) {try {if (e != null) {if (e instanceof HttpException) {failure(HTTP_ERROR); } else if (e instanceof SocketException) {failure(NET_WORK_ERROR); } else {failure(UNKNOW_ERROR); }} else {failure(UNKNOW_ERROR); }e.printStackTrace(); } catch (Exception e1) {failure(UNKNOW_ERROR); e1.printStackTrace(); }}@Override public void onComplete() {}/** * code * 1000 UNKNOW_ERROR 未知错误 * 1001 json 转化异常 parse error * 1002 当前网络不可用 java.net.SocketException: Network is unreachable 超时 * 1003 服务器不可用 401 402 403 500 502 503 504 * * @param code */ public static final int UNKNOW_ERROR = 1000; public static final int JSON_FORMAT_ERROR = 1001; public static final int NET_WORK_ERROR = 1002; public static final int HTTP_ERROR = 1003; public abstract void success(T t); public abstract void failure(int code); }
public class CustomLinearLayout extends LinearLayout{private int i = 1; private EditText et; public CustomLinearLayout(Context context) {super(context); }public CustomLinearLayout(final Context context, @Nullable AttributeSet attrs) {super(context, attrs); View view = View.inflate(context, R.layout.custom_linearlayout,null); addView(view); Button jia = view.findViewById(R.id.jia); Button jian = view.findViewById(R.id.jian); et = view.findViewById(R.id.edit); et.setText("1"); jia.setOnClickListener(new OnClickListener() {@Override public void onClick(View v) {i = Integer.parseInt(et.getText().toString().trim()); i++; et.setText(i+""); if(countListener!=null){countListener.setCount(i); }}}); jian.setOnClickListener(new OnClickListener() {@Override public void onClick(View v) {i = Integer.parseInt(et.getText().toString().trim()); if(i>1){i--; }else{Toast.makeText(context,"数量不能小于1",Toast.LENGTH_SHORT).show(); }et.setText(i+""); if(countListener!=null){countListener.setCount(i); }}}); }public CustomLinearLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr); }CountListener countListener; public void getCount(CountListener countListener){this.countListener = countListener; }public interface CountListener{void setCount(int i); }public void setText(String count){et.setText(count); }}
public class RetrofitManager {public static OkHttpClient client = new OkHttpClient.Builder().build(); public static ApiService apiService = new Retrofit.Builder().baseUrl("http://120.27.23.105/").addCallAdapterFactory(RxJava2CallAdapterFactory.create()).addConverterFactory(ScalarsConverterFactory.create()).client(client).build().create(ApiService.class); public static void get(String url, Map<String,String> map, Observer observer){apiService.get(url,map).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(observer); }public static void post(String url,Map<String,String> map,Observer observer){apiService.post(url,map).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(observer); } }
public class XQmodel {public void getData(String pid, final IXiangQiangModel iXiangQiangModel){Map<String ,String > map=new HashMap<>(); map.put("pid","10"); map.put("source","android"); RetrofitManager.get("product/getProductDetail",map, new BaseObserver<XiangQingBean>() {@Override public void success(XiangQingBean xiangQingBean) {if(iXiangQiangModel!=null){iXiangQiangModel.seccess(xiangQingBean); }}@Override public void failure(int code) {}}); }public interface IXiangQiangModel{void seccess(XiangQingBean xiangQingBean); } }
public class XQpresenter {IXiangQingView iXiangQingView; XQmodel xQmodel; public XQpresenter(IXiangQingView iXiangQingView) {this.iXiangQingView = iXiangQingView; xQmodel = new XQmodel(); }public void getData(String pid) {xQmodel.getData(pid, new XQmodel.IXiangQiangModel() {@Override public void seccess(XiangQingBean xiangQingBean) {iXiangQingView.success(xiangQingBean.getData()); }}); }public interface IXiangQingView {void success(XiangQingBean.DataBean list); }//防止内存泄漏 public void detach() {iXiangQingView = null; } }
public class AddCartModel {//添加购物车 public void getData(String pid, final IAddcartModel iAddcartModel){Map<String, String> map = new HashMap<>(); map.put("pid",pid); map.put("source","android"); RetrofitManager.get("product/addCart?uid=11738",map, new BaseObserver<AddCartBean>() {@Override public void success(AddCartBean addCartBean) {if(iAddcartModel!=null){iAddcartModel.success(addCartBean); }}@Override public void failure(int code) {}}); }public interface IAddcartModel{void success(AddCartBean addCartBean); } }
public class AddCartPrestener {IAddCartView iAddCartView; AddCartModel addCartModel; public AddCartPrestener(IAddCartView iAddCartView) {this.iAddCartView = iAddCartView; addCartModel = new AddCartModel(); }public void getData(String pid) {addCartModel.getData(pid, new AddCartModel.IAddcartModel() {@Override public void success(AddCartBean addCartBean) {if (iAddCartView != null) {iAddCartView.success(addCartBean.getMsg()); }}}); }
public class ShopCartModel {//购物车的数据 public void getData(final IShopCart iShopCart) {Map<String, String> map = new HashMap<>(); map.put("uid", "11738"); map.put("source", "android"); RetrofitManager.get("product/getCarts", map, new BaseObserver<CartBean>() {@Override public void success(CartBean cartBean) {if(iShopCart!=null){iShopCart.success(cartBean); }}@Override public void failure(int code) {}}); }public interface IShopCart {void success(CartBean cartBean); } }
public interface IAddCartView { void success(String s); }}
public class ShopCartPrestener {ShopCartModel cartModel; ICartView iCartView; public ShopCartPrestener(ICartView iCartView) {this.iCartView = iCartView; cartModel = new ShopCartModel(); }public void getData() {cartModel.getData(new ShopCartModel.IShopCart() {@Override public void success(CartBean cartBean) {//拿到一级二级数据 List<CartBean.DataBean> group = cartBean.getData(); List<List<CartBean.DataBean.ListBean>> child = new ArrayList<>(); for (int i = 0; i < group.size(); i++) {child.add(group.get(i).getList()); }if (iCartView != null) {iCartView.success(group, child); }}}); }public interface ICartView {void success(List<CartBean.DataBean> group, List<List<CartBean.DataBean.ListBean>> child); }}
public class ShopCartActivity extends AppCompatActivity implements ShopCartPrestener.ICartView {@BindView(R.id.bianji)TextView bianji; @BindView(R.id.linear2)RelativeLayout linear2; @BindView(R.id.expandView)ExpandableListView expandView; @BindView(R.id.checkAll)CheckBox checkAll; @BindView(R.id.zprice)TextView zprice; @BindView(R.id.zcount)Button zcount; @BindView(R.id.linear)RelativeLayout mLinear; private ShopCartPrestener shopCartPrestener; private ElvAdapter elvAdapter; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_shop_cart); ButterKnife.bind(this); shopCartPrestener = new ShopCartPrestener(this); shopCartPrestener.getData(); }@OnClick({R.id.checkAll, R.id.zcount})public void onViewClicked(View view) {switch (view.getId()) {case R.id.checkAll:elvAdapter.checkedAll(checkAll.isChecked()); break; case R.id.zcount:break; }}@Override public void success(List<CartBean.DataBean> group, List<List<CartBean.DataBean.ListBean>> child) {elvAdapter = new ElvAdapter(ShopCartActivity.this, group, child); elvAdapter.setChangeListener(new ElvAdapter.ChangeListener() {@Override public void setState(boolean flag) {checkAll.setChecked(flag); }@Override public void setText(String price, String count) {zcount.setText("结算(" + count + ")"); zprice.setText("总计:" + price + "¥"); }}); expandView.setAdapter(elvAdapter); //默认展开 for (int i = 0; i < group.size(); i++) {expandView.expandGroup(i); }} }
<RelativeLayout android:id="@+id/linear2" android:layout_width="match_parent" android:layout_height="60dp" android:background="#000"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="购物车" android:textColor="#fff" android:textSize="20sp" /> <TextView android:id="@+id/bianji" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="10dp" android:layout_marginRight="10dp" android:text="编辑" android:textColor="#fff" /> </RelativeLayout> <ExpandableListView android:id="@+id/expandView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/linear" android:layout_below="@+id/linear2" android:groupIndicator="@null"></ExpandableListView> <RelativeLayout android:id="@+id/linear" android:layout_width="match_parent" android:layout_height="70dp" android:layout_alignParentBottom="true" android:background="#AAAAAA"> <CheckBox android:id="@+id/checkAll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="全选" /> <TextView android:id="@+id/zprice" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="总计:0.0¥" /> <Button android:id="@+id/zcount" android:layout_width="100dp" android:layout_height="match_parent" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="#FF0000" android:text="结算(0)" android:textColor="#fff" /> </RelativeLayout>
public class CartBean {/** * msg : 请求成功 * code : 0 * data : [{"list":[{"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","num":2,"pid":1,"price":118,"pscid":1,"selected":0,"sellerid":17,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}],"sellerName":"商家17","sellerid":"17"}] */ 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 {/** * list : [{"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","num":2,"pid":1,"price":118,"pscid":1,"selected":0,"sellerid":17,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}] * sellerName : 商家17 * sellerid : 17 */ private String sellerName; private String sellerid; private List<ListBean> list; private boolean gChecked; public boolean isgChecked() {return gChecked; }public void setgChecked(boolean gChecked) {this.gChecked = gChecked; }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 {/** * 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 * num : 2 * pid : 1 * price : 118.0 * pscid : 1 * selected : 0 * sellerid : 17 * subhead : 每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下 * title : 北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g */ 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 boolean cChecked; public boolean iscChecked() {return cChecked; }public void setcChecked(boolean cChecked) {this.cChecked = cChecked; }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; }}} }
public class AddCartBean {/** * msg : 加购成功 * code : 0 */ private String msg; private String code; 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 class ElvAdapter extends BaseExpandableListAdapter {Context context; List<CartBean.DataBean> group; List<List<CartBean.DataBean.ListBean>> child; private Holder1 holder1; private Holder2 holder2; public ElvAdapter(Context context, List<CartBean.DataBean> group, List<List<CartBean.DataBean.ListBean>> child) {this.context = context; this.group = group; this.child = child; }@Override public int getGroupCount() {return group.size(); }@Override public int getChildrenCount(int groupPosition) {return child.get(groupPosition).size(); }@Override public Object getGroup(int groupPosition) {return group.get(groupPosition); }@Override public Object getChild(int groupPosition, int childPosition) {return child.get(groupPosition).get(childPosition); }@Override public long getGroupId(int groupPosition) {return groupPosition; }@Override public long getChildId(int groupPosition, int childPosition) {return childPosition; }@Override public boolean hasStableIds() {return false; }@Override public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.item_expandable_listview, null); holder1 = new Holder1(); holder1.checkBox = convertView.findViewById(R.id.groupChecked); holder1.textview = convertView.findViewById(R.id.groupTitle); convertView.setTag(holder1); } else {holder1 = (Holder1) convertView.getTag(); }//设置显示数据 holder1.textview.setText(group.get(groupPosition).getSellerName()); holder1.checkBox.setChecked(group.get(groupPosition).isgChecked()); //设置一级标题的点击事件 holder1.checkBox.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {boolean b = !group.get(groupPosition).isgChecked(); Toast.makeText(context, b + "", Toast.LENGTH_SHORT).show(); group.get(groupPosition).setgChecked(b); //拿到你点击孩子的父亲 List<CartBean.DataBean.ListBean> listBeans = child.get(groupPosition); //遍历看看他有几个孩子 for (int i = 0; i < listBeans.size(); i++) {listBeans.get(i).setcChecked(group.get(groupPosition).isgChecked()); }changeListener.setState(isGroup()); notifyDataSetChanged(); sum(); }}); return convertView; }@Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.item_listview, null); holder2 = new Holder2(); holder2.imageView = convertView.findViewById(R.id.simpleDraw); holder2.checkBox = convertView.findViewById(R.id.childChecked); holder2.title = convertView.findViewById(R.id.childTitle); holder2.miaoshu = convertView.findViewById(R.id.miaoShu); holder2.price = convertView.findViewById(R.id.childPrice); holder2.yprice = convertView.findViewById(R.id.childPriceY); holder2.linearLayout = convertView.findViewById(R.id.linearLayoutItem); holder2.customLinearLayout = convertView.findViewById(R.id.customLinearLayout); holder2.bt2 = convertView.findViewById(R.id.bt_del); convertView.setTag(holder2); } else {holder2 = (Holder2) convertView.getTag(); }final CartBean.DataBean.ListBean listBean = child.get(groupPosition).get(childPosition); //设置显示数据 holder2.checkBox.setChecked(listBean.iscChecked()); holder2.title.setText(listBean.getTitle()); holder2.price.setText("¥" + listBean.getPrice()); holder2.yprice.setText("¥" + listBean.getBargainPrice()); holder2.customLinearLayout.setText(listBean.getNum() + ""); //中划线 holder2.yprice.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); // 设置中划线并加清晰 holder2.yprice.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG); holder2.miaoshu.setText(listBean.getSubhead()); String[] split = listBean.getImages().split("\\|"); Glide.with(context).load(split[0]).into(holder2.imageView); holder2.checkBox.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {List<CartBean.DataBean.ListBean> listBeans = child.get(groupPosition); boolean b = !listBeans.get(childPosition).iscChecked(); listBeans.get(childPosition).setcChecked(b); boolean isno = isChildChange(listBeans); //设置一级的状态 group.get(groupPosition).setgChecked(isno); changeListener.setState(isChild()); notifyDataSetChanged(); sum(); }}); //加减号的点击事件 holder2.customLinearLayout.getCount(new CustomLinearLayout.CountListener() {@Override public void setCount(int i) {listBean.setNum(i); sum(); }}); holder2.bt2.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View view) {//其实就是删除集合 List<CartBean.DataBean.ListBean> listBeans = child.get(groupPosition); if (listBeans.size() > 0) {listBeans.remove(childPosition); }if (listBeans.size() == 0) {child.remove(groupPosition); group.remove(groupPosition); }//刷新列表 notifyDataSetChanged(); }}); return convertView; }//计算的方法 public void sum() {double price = 0; int count = 0; for (int i = 0; i < group.size(); i++) {List<CartBean.DataBean.ListBean> list = group.get(i).getList(); for (int j = 0; j < list.size(); j++) {if (list.get(j).iscChecked()) {price += list.get(j).getPrice() * list.get(j).getNum(); count += list.get(j).getNum(); }}}notifyDataSetChanged(); //接口回调 if (changeListener != null) {changeListener.setText(price + "", count + ""); }}ChangeListener changeListener; public void setChangeListener(ChangeListener changeListener) {this.changeListener = changeListener; }//接口传值,去改变全选的状态,设置商品的数量价格 public interface ChangeListener {void setState(boolean flag); void setText(String price, String count); }//子类点击改变全选状态 public boolean isChild() {for (int i = 0; i < group.size(); i++) {List<CartBean.DataBean.ListBean> list = group.get(i).getList(); for (int j = 0; j < list.size(); j++) {if (!child.get(i).get(j).iscChecked()) {return false; }}}return true; }//父类点击改变全选的状态 public boolean isGroup() {for (int i = 0; i < group.size(); i++) {if (!group.get(i).isgChecked()) {return false; }}return true; }//设置全选 public void checkedAll(boolean flag) {if (flag) {for (int i = 0; i < group.size(); i++) {List<CartBean.DataBean.ListBean> list = group.get(i).getList(); group.get(i).setgChecked(true); for (int j = 0; j < list.size(); j++) {child.get(i).get(j).setcChecked(true); }}} else {for (int i = 0; i < group.size(); i++) {List<CartBean.DataBean.ListBean> list = group.get(i).getList(); group.get(i).setgChecked(false); for (int j = 0; j < list.size(); j++) {child.get(i).get(j).setcChecked(false); }}}notifyDataSetChanged(); sum(); }//如果有意子类没选中就将父类的状态改为true public boolean isChildChange(List<CartBean.DataBean.ListBean> listBeans) {for (int i = 0; i < listBeans.size(); i++) {if (!listBeans.get(i).iscChecked()) {return false; }}return true; }@Override public boolean isChildSelectable(int groupPosition, int childPosition) {return true; }class Holder1 {CheckBox checkBox; TextView textview; }class Holder2 {LinearLayout linearLayout; CustomLinearLayout customLinearLayout; CheckBox checkBox; ImageView imageView; TextView title; TextView miaoshu; TextView price; TextView yprice; Button bt2; } }
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="match_parent"> <Button android:layout_width="35dp" android:layout_height="35dp" android:text="-" android:id="@+id/jian" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/edit" /> <Button android:text="+" android:id="@+id/jia" android:layout_width="35dp" android:layout_height="35dp" /> </LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <CheckBox android:id="@+id/groupChecked" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/groupTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="标题" /> </LinearLayout>
<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:orientation="horizontal" android:id="@+id/linearLayoutItem" android:gravity="center_vertical" android:layout_height="match_parent"> <CheckBox android:layout_marginLeft="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/childChecked" /> <ImageView android:layout_marginLeft="5dp" android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/simpleDraw" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:orientation="vertical"> <TextView android:id="@+id/childTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="标题" android:textSize="16sp" android:textStyle="bold" /> <TextView android:id="@+id/miaoShu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="20dp" android:paddingTop="20dp" android:text="描述" /> <Button android:id="@+id/bt_del" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:text="删除" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:id="@+id/childPrice" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="价格" android:textColor="#FCB950" android:textSize="16sp" /> <TextView android:id="@+id/childPriceY" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="优惠" /> <com.bwie.lyk_week03.net.CustomLinearLayout android:id="@+id/customLinearLayout" android:layout_width="wrap_content" android:layout_height="wrap_content"> </com.bwie.lyk_week03.net.CustomLinearLayout> </LinearLayout> </LinearLayout> </LinearLayout>
public class XiangQingBean {/** * msg : * seller : {"description":"我是商家3","icon":"http://120.27.23.105/images/icon.png","name":"商家3","productNums":999,"score":5,"sellerid":3} * 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":10,"price":555.55,"pscid":1,"salenum":0,"sellerid":3,"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 : 我是商家3 * icon : http://120.27.23.105/images/icon.png * name : 商家3 * productNums : 999 * score : 5 * sellerid : 3 */ 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 : 10 * price : 555.55 * pscid : 1 * salenum : 0 * sellerid : 3 * subhead : 每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下 * title : 北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g */ private double bargainPrice; private String createtime; private String detailUrl; private String images; private int itemtype; private int pid; private double 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 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 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; }} }
视频播放+详情页+购物车相关推荐
- vue+element模仿腾讯视频电影网站(二),增加视频播放详情页
一.前言 1. 本项目在线预览:点击访问 2. 作者其他博客成品汇总预览:点击访问 3. 接上一篇:<vue+element模仿腾讯视频电影网站> 暂时源码并没有提供其他获取渠道,私聊作者 ...
- uniapp商品详情页规格、SKU选择
uniapp商品详情页购物车选择 提示:这里因为后台返回的数据格式原因,代码性能可能有点稍差,但是注释是很完整的 文章目录 uniapp商品详情页购物车选择 先上代码,以示诚意 后台接口返回的数据格式 ...
- 微信小程序商城开发-商品详情页跳转购物车
项目场景: 微信小程序商城开发中商品详情页中购物车页面的跳转(仅限于tabbar页面的跳转) 问题描述 点击商品详情页中的购物车图标跳转不到tabbar及导航栏中的购物车页面,总是报错 原因分析: 微 ...
- 小米商城官网(登录页,首页,详情页,我的购物车页,我的订单页,确认订单页)HTML+CSS+JS
文章目录 前言 一.登录页 二.首页 三.我的购物车页 四.我的订单页 五.确认订单页 六.详情页 七.整体结构和效果图 总结 前言 仿小米商城官网项目是本人实训内容,实训老师带着做的首页和登录页,本 ...
- SpringBoot--网上商城项目(自定义的参数解析器、购物车后台前台功能、商品详情页)
目录 一.自定义的参数解析器 关于Mybatis-plus时间字段代码生成问题 报错信息:Caused by: java.lang.IllegalStateException: No typehand ...
- Uni-app 课程详情页 获取课程详情 + 收藏 + 加入购物车
class-detail.vue > <template><view class="class-detail"><!-- 导航 -->&l ...
- 仿写小米官网(登录、注册页面、首页、详情页、购物车)
功能介绍 各网页公用功能 返回顶部 调用jquery的方法实现效果,页面滚动超过任意位置时右侧出现返回顶部按钮,点击后平滑返回顶部 注册 用户需要填写手机号.昵称.密码且勾选同意协议,如果是合法数据且 ...
- 微服务项目实战技术点汇总:“尚硅谷的谷粒在线教育”九、整合阿里云视频播放器、课程评论功能、讲师详情页、课程详情页、检索功能、课程和讲师列表功能
文章目录 一.讲师 1.分页查询接口(后端) 1.controller 2.service 3.测试 2.分页显示讲师(前端) 3.讲师详情页(后端) 1.controller 2.测试 4.讲师详情 ...
- 渲染页到详情页到加入购物车
1.渲染 拿到数据放在自己的data渲染 data(){ headerList: [] } :class="tabid == index ? 'active' : ''" //ta ...
最新文章
- Oracle单机版开机自启动
- Ajax的用法之JQuery
- php-fmp开机启动,php-fpm设置成服务并开机自动启动
- DL之DeepLabv1:DeepLabv1算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- [javaweb] servlet-session 会话跟踪技术 与 session保存作用域 (三)
- Zookeeper 服务注册中心
- 极客马拉松JUNCTION✖️TIANJIN
- 告别DNS劫持,一文读懂DoH
- Dart基础-变量与类型
- python必备入门代码-学习Python必备的八大知识板块,学好这些你就算入门啦~
- 3.5 Zend_Db_Table_Rowset
- 更换app图标和名称
- 新阁上位机开发---数据库系统之sa账户登录失败
- 卡口和电子警察的区别
- phpmywind 手机站多语言版本
- AndroidStudio蓝牙通信
- 29 | “懒惰”应该是所有程序员的骄傲
- 微信红包随机数字_微信随机红包数详解和算法代码
- h5app 实现ios更新跳转appStore
- RW、RO、ZI段的含义
热门文章
- PAT题解——Basic Level——1015 德才论
- IT小白如何从职场新人到行业翘楚,看一个IT高管的发展路线
- 写给刚毕业的弟、妹们
- 基于GMap.NET地图下载器的开发和研究
- java软件开发培训班靠谱吗?好找工作吗?
- text-align: justify;text-align-last: justify;实现两端对齐
- 普林斯顿大学计算机科学排名,普林斯顿大学计算机科学与工程世界排名2019年最新排名第9(ARWU世界排名)...
- c语言除法取两位小数点,高精度除法小数点位数
- 趣丸集团招股书“失效”,旗下TT语音已下架,如何实现稳定增长?
- tinymce 字体样式_谷歌字体和TinyMCE