淘宝购物车功能的实现
json串 shop.json
{ "code" : 200 , "orderData" : [ { "shopId": 1, "shopName":"京东自营", "cartlist": [ { "id": 1, "shopId": 1, "shopName": "京东自营", "defaultPic": "https://img30.360buyimg.com/popWareDetail/jfs/t3208/194/7616404169/244198/369625db/58b7d093N03520fb7.jpg", "productId": 1, "productName": "三只松鼠_零食大礼包", "color": "黑色", "size": "18L", "price": 20, "count":1 }, { "id": 2, "shopId": 1, "shopName": "京东自营", "defaultPic": "https://img14.360buyimg.com/n0/jfs/t2971/15/167732091/93002/204c1016/574d9d9aNe4e6fa7a.jpg", "productId": 2, "productName": "小米心跳手环", "color": "白色", "size": "20XXL", "price": 148, "count": 1 } ] } , { "shopId": 2, "shopName":"海澜之家", "cartlist": [ { "id": 1, "shopId": 2, "shopName": "海澜之家", "defaultPic": "https://img30.360buyimg.com/popWaterMark/jfs/t4075/83/1343091204/132469/9034cb9c/5873496bN68020ba8.jpg", "productId": 1, "productName": "短袖T恤男 2017夏季新品", "color": "蓝色", "size": "30X", "price": 181, "count":1 } ] } , { "shopId": 3, "shopName":"OPPO官方旗舰店", "cartlist": [ { "id": 1, "shopId": 3, "shopName": "OPPO官方旗舰店", "defaultPic": "https://img10.360buyimg.com/cms/jfs/t6064/272/2163314583/157700/442d6477/593c1c49N7c63a7d9.jpg", "productId": 1, "productName": "OPPO R11 全网通", "color": "蓝色", "size": "30X", "price": 1999, "count":1 }, { "id": 2, "shopId": 3, "shopName": "OPPO官方旗舰店", "defaultPic": "https://img14.360buyimg.com/n0/jfs/t3142/194/4953241722/254855/1651c2b1/585b9021Nf653e48a.jpg", "productId": 1, "productName": "OPPO R9 全网通", "color": "蓝色", "size": "30X", "price": 999, "count":1 } ] } ] }
//导入依赖
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.squareup.picasso:picasso:2.5.1'//主类
public class MainActivity extends AppCompatActivity { @BindView(R.id.rv) RecyclerView rv; @BindView(R.id.checkbox) CheckBox checkbox; @BindView(R.id.tv) TextView tv; @BindView(R.id.bt) Button bt; List<ShopBean.OrderDataBean.CartlistBean> list = new ArrayList<ShopBean.OrderDataBean.CartlistBean>(); private LinearLayoutManager manager; private ShopAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this);//上面可以使用网络请求数据,进行解析try { InputStream inputStream = getAssets().open("shop.json"); String data = convertStreamToString(inputStream); Gson gson = new Gson(); ShopBean shopBean = gson.fromJson(data, ShopBean.class); for (int i = 0; i < shopBean.getOrderData().size(); i++) { int length = shopBean.getOrderData().get(i).getCartlist().size(); for (int j = 0; j < length; j++) { list.add(shopBean.getOrderData().get(i).getCartlist().get(j)); } } //设置线性布局 manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); rv.setLayoutManager(manager);//进行适配 adapter = new ShopAdapter(this,list); rv.setAdapter(adapter);adapter.setCheckListener(new ShopAdapter.CheckListener() { @Override public void check(boolean check, int position) { boolean allCheck = true ; float price = 0 ; int count = 0; for (int i = 0; i < list.size(); i++) { if (list.get(i).isSelect()) { price += list.get(i).getPrice() * list.get(i).getCount(); count++; } } for (int i = 0; i < list.size(); i++) { if (!list.get(i).isSelect()) { allCheck = false; break; } } tv.setText(price+"元"); bt.setText("结算("+count+")"); if(allCheck){ checkbox.setChecked(true); }else { checkbox.setChecked(false); } } }); } catch (IOException e) { e.printStackTrace(); } } @OnClick({R.id.checkbox, R.id.bt}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.checkbox: boolean check = checkbox.isChecked() ; float price = 0 ; int count = 0; for (int i = 0; i < list.size(); i++) { list.get(i).setSelect(check); if(check){ if (list.get(i).isSelect()) { price += list.get(i).getPrice() * list.get(i).getCount(); count++; } } } adapter.notifyDataSetChanged(); tv.setText("¥"+price); bt.setText("结算("+count+")"); break; case R.id.bt: break; } } public String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); }}// 适配器
public class ShopAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {private Context context;private List<ShopBean.OrderDataBean.CartlistBean> list;public ShopAdapter(Context context, List<ShopBean.OrderDataBean.CartlistBean> list) {this.context = context;this.list = list;}@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(context).inflate(R.layout.adapter_item, parent, false);MyViewHolder viewHolder = new MyViewHolder(view);return viewHolder;}@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {if(holder instanceof MyViewHolder){MyViewHolder myViewHolder = (MyViewHolder) holder;myViewHolder.danjia.setText(list.get(position).getPrice()+"");Picasso.with(context).load(list.get(position).getDefaultPic()).into(myViewHolder.shopface);if(list.get(position).isSelect()){if(!myViewHolder.checkbox.isChecked()){myViewHolder.checkbox.setChecked(true);}} else {myViewHolder.checkbox.setChecked(false);}myViewHolder.checkbox.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {boolean isChecked = list.get(position).isSelect() ;list.get(position).setSelect(!isChecked);notifyDataSetChanged();if(listener != null){listener.check(!isChecked,position);}}});myViewHolder.customviewid.setListener(new MyView.ChangeListener() {@Overridepublic void onChange(int count) {list.get(position).setCount(count);notifyDataSetChanged();if(listener != null){listener.check(list.get(position).isSelect(),position);}}});}}@Overridepublic int getItemCount() {return list.size();}static class MyViewHolder extends RecyclerView.ViewHolder{@BindView(R.id.checkbox)CheckBox checkbox;@BindView(R.id.shopface)ImageView shopface;@BindView(R.id.price)TextView danjia;@BindView(R.id.customviewid)MyView customviewid;MyViewHolder(View view) {super(view);ButterKnife.bind(this, view);}}public CheckListener listener;public void setCheckListener(CheckListener listener){this.listener = listener ;}interface CheckListener {public void check(boolean check,int position);}}
//自定义购物车的加减按钮
public class MyView extends LinearLayout {private EditText content;public MyView(Context context) {super(context);init(context);}public MyView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);init(context);}public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context);}private void init(Context context){View view = LayoutInflater.from(context).inflate(R.layout.view_layout,null);addView(view);Button revserse = (Button) view.findViewById(R.id.revserse);Button add = (Button) view.findViewById(R.id.add);content = (EditText) view.findViewById(R.id.content);revserse.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String result = content.getText().toString().trim() ;int integerResult = Integer.valueOf(result);if(integerResult > 1){integerResult = integerResult - 1 ;content.setText(integerResult+"");if(listener != null){listener.onChange(integerResult);}}}});add.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String result = content.getText().toString().trim() ;int integerResult = Integer.valueOf(result) ;integerResult = integerResult + 1 ;content.setText(integerResult+"");if(listener != null){listener.onChange(integerResult);}}});content.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {if(listener != null){listener.onChange(Integer.parseInt(s.toString()));}}});}public ChangeListener listener ;public void setListener(ChangeListener listener){this.listener = listener;}interface ChangeListener{void onChange(int count);}
}//JavaBean可以自己写
public class ShopBean {/*** code : 200* orderData : [{"shopId":1,"shopName":"京东自营","cartlist":[{"id":1,"shopId":1,"shopName":"京东自营","defaultPic":"https://img30.360buyimg.com/popWareDetail/jfs/t3208/194/7616404169/244198/369625db/58b7d093N03520fb7.jpg","productId":1,"productName":"三只松鼠_零食大礼包","color":null,"size":null,"price":20,"count":2},{"id":2,"shopId":1,"shopName":"京东自营","defaultPic":"https://img14.360buyimg.com/n0/jfs/t2971/15/167732091/93002/204c1016/574d9d9aNe4e6fa7a.jpg","productId":2,"productName":null,"color":null,"size":null,"price":148,"count":3}]},{"shopId":2,"shopName":"海澜之家","cartlist":[{"id":1,"shopId":2,"shopName":"海澜之家","defaultPic":"https://img30.360buyimg.com/popWaterMark/jfs/t4075/83/1343091204/132469/9034cb9c/5873496bN68020ba8.jpg","productId":1,"productName":"短袖T恤男 2017夏季新品","color":null,"size":null,"price":181,"count":1}]}]*/private int code;private List<OrderDataBean> orderData;public int getCode() {return code;}public void setCode(int code) {this.code = code;}public List<OrderDataBean> getOrderData() {return orderData;}public void setOrderData(List<OrderDataBean> orderData) {this.orderData = orderData;}public static class OrderDataBean {/*** shopId : 1* shopName : 京东自营* cartlist : [{"id":1,"shopId":1,"shopName":"京东自营","defaultPic":"https://img30.360buyimg.com/popWareDetail/jfs/t3208/194/7616404169/244198/369625db/58b7d093N03520fb7.jpg","productId":1,"productName":"三只松鼠_零食大礼包","color":null,"size":null,"price":20,"count":2},{"id":2,"shopId":1,"shopName":"京东自营","defaultPic":"https://img14.360buyimg.com/n0/jfs/t2971/15/167732091/93002/204c1016/574d9d9aNe4e6fa7a.jpg","productId":2,"productName":null,"color":null,"size":null,"price":148,"count":3}]*/private int shopId;private String shopName;private List<CartlistBean> cartlist;public int getShopId() {return shopId;}public void setShopId(int shopId) {this.shopId = shopId;}public String getShopName() {return shopName;}public void setShopName(String shopName) {this.shopName = shopName;}public List<CartlistBean> getCartlist() {return cartlist;}public void setCartlist(List<CartlistBean> cartlist) {this.cartlist = cartlist;}public static class CartlistBean {/*** id : 1* shopId : 1* shopName : 京东自营* defaultPic : https://img30.360buyimg.com/popWareDetail/jfs/t3208/194/7616404169/244198/369625db/58b7d093N03520fb7.jpg* productId : 1* productName : 三只松鼠_零食大礼包* color : null* size : null* price : 20* count : 2*/private int id;private int shopId;private String shopName;private String defaultPic;private int productId;private String productName;private Object color;private Object size;private int price;private int count;//商品是否被选中private boolean isSelect = false;//是否是第一个 如果isfirst 等于1 显示商户的名称, 否则隐藏商户的名称private int isFirst = 2;//商户是否被选中private boolean isShopSelect = false;public int getId() {return id;}public void setId(int id) {this.id = id;}public int getShopId() {return shopId;}public void setShopId(int shopId) {this.shopId = shopId;}public String getShopName() {return shopName;}public void setShopName(String shopName) {this.shopName = shopName;}public String getDefaultPic() {return defaultPic;}public void setDefaultPic(String defaultPic) {this.defaultPic = defaultPic;}public int getProductId() {return productId;}public void setProductId(int productId) {this.productId = productId;}public String getProductName() {return productName;}public void setProductName(String productName) {this.productName = productName;}public Object getColor() {return color;}public void setColor(Object color) {this.color = color;}public Object getSize() {return size;}public void setSize(Object size) {this.size = size;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}public boolean isSelect() {return isSelect;}public void setSelect(boolean select) {isSelect = select;}public int getIsFirst() {return isFirst;}public void setIsFirst(int isFirst) {this.isFirst = isFirst;}public boolean isShopSelect() {return isShopSelect;}public void setShopSelect(boolean shopSelect) {isShopSelect = shopSelect;}}}
}//布局
//主类布局
<android.support.v7.widget.RecyclerViewandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:id="@+id/rv"></android.support.v7.widget.RecyclerView><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><CheckBoxandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/checkbox"android:layout_alignParentLeft="true"android:layout_centerVertical="true"android:text="全选"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/tv"android:layout_centerInParent="true"android:layout_marginLeft="100dp"android:text="总价:"android:textSize="22sp"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:id="@+id/bt"android:text="结算"/></RelativeLayout>
//自定义View布局
<Buttonandroid:layout_width="30dp"android:layout_height="30dp"android:id="@+id/revserse"android:text="-"android:background="#00FFFFFF"/>
<EditTextandroid:text="1"android:background="@null"android:layout_width="30dp"android:layout_height="30dp"android:gravity="center"android:id="@+id/content"/><Buttonandroid:background="#00FFFFFF"android:text="+"android:id="@+id/add"android:layout_width="30dp"android:layout_height="30dp"/>
//适配器里面的条目<CheckBoxandroid:layout_gravity="center"android:id="@+id/checkbox"android:layout_width="wrap_content"android:layout_height="wrap_content" />
<LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:orientation="vertical"android:layout_gravity="center"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:id="@+id/shopface"android:layout_width="80dp"android:layout_height="80dp"android:background="@mipmap/ic_launcher" /><TextViewandroid:id="@+id/price"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="22sp"android:layout_gravity="center"/></LinearLayout><com.bwie.gouwuchedemo.MyViewandroid:id="@+id/customviewid"android:layout_gravity="center"android:layout_width="100dp"android:layout_height="50dp"/></LinearLayout>
淘宝购物车功能的实现相关推荐
- 2020用vue实现仿美团导航切换功能和淘宝购物车功能,实现默认第一个导航显示效果?
总结:之前一直未写过同时实现跳转当前页面和跳转新页面的项目,要么是当前,要么是新页面,今天更新一个两个同时实现的项目. :相信很多人都遇到过router-link通过to跳转页面有时候会不显示内容的b ...
- 简要模仿淘宝购物车功能
一主要功能: 实现通过点击.拖动添加购物车,购物金额自动结算,以及删减物品的功能. 有待改进之处:还未实现在购物车内实现+1,-1功能. 二.效果图 三.相关代码 1,HTML+JS <!DOC ...
- 高仿淘宝购物车分分钟让你集成
前言 做商城类电商app购物车确实一直是一个难点,为什么难呢? 主要原因呢是他里面的逻辑复杂,然后 百度的资源好像都不太理想,好多就是一个简单的listView来实现根本就达不到开发的需求.然后 一般 ...
- 面试高频问题——“淘宝购物车”怎么测试
面试高频问题--"淘宝购物车"怎么测试 测试思维 依然附上测试任何事物的测试思路: 第一步:梳理产品的核心业务流程:明白这是个什么项目,实现了什么业务,以及是怎么实现的? 这个步骤 ...
- 你能说说“淘宝购物车”怎么测试么?
前言 之前我有整理过一系列文章"支付功能如何测试?","抖音直播要如何测试","微信红包如何测试",很多学生说是及时雨,帮助了他们的测试面试 ...
- 互联网晚报 | 12月8日 星期三 | 淘宝购物车上线“好友买单”功能;英超联赛正式入驻视频号;中国联通成立5G消息生态联盟...
今日看点 ✦ 中国联通成立5G消息生态联盟,已搭建300余项示范应用 ✦ 淘宝购物车双12上线"好友买单"功能,将支持填写双地址 ✦ 百度百家号宣布创作者突破460万,2022年将 ...
- 互联网晚报 | 10月28日 星期四 | 农夫山泉钟睒睒首次成为中国首富;淘宝购物车分享功能上线;段永平否认牵头OV联合造车...
今日看点 ✦ 荣耀打响重回海外第一枪:多国市场发布荣耀50系列 ✦ 段永平否认牵头OPPO.vivo联合造车,称绝不会"重出江湖" ✦ 淘宝购物车分享功能正式上线,可以分享至 ...
- 淘宝购物车分享上线第一天:630万人在用购物车社交
来源 | 电商在线(ID:dianshangmj) 作者 | 吴羚玮 编辑|斯问 当一年中最大的消费季到来,很多人开始关心,"你的购物车里有什么". 网购时代,几乎每个人都有一辆「 ...
- 测试网页版淘宝购物车
测试网页版淘宝购物车 界面测试: 1. 购物车页面布局是否合理,显示是否完整 2. 鼠标浮动在购物车图标,迷你购物车界面显示是否正常 3. 不同店铺的商品在不同的区域正确显示 4. 页面的菜单功能栏正 ...
最新文章
- 指定用户 启动 进入 docker容器
- fatal error C1021: 无效的预处理器命令“warning”
- spark mongo java_java及spark2.X连接mongodb3.X单机或集群的方法(带认证及不带认证)...
- 哲学家就餐问题linux源代码,Linux下实现哲学家就餐问题
- Redis基本数据类型1--String
- k8s Service之ClusterIP示例
- 百度地图 开发 乡镇级区域显示_Tableau导入乡镇级地图进行数据展示
- 微信壹佰超级名片小程序源码v1.1.16
- java web快速入门_Web安全快速入门
- 11 Sping框架--AOP的相关概念及其应用
- 程序默认在副屏显示_树莓派使用 OLED 屏显示图片及文字
- Unity3D基础34.1:打砖块小游戏优化
- c1flexGrid 在单元格中显示图片, 及行号
- vue 跨域请求js添加代码
- WebRTC 之 RTX
- java实现代理服务器
- 神州数码云平台基础环境搭建
- 数字签名和数字证书的区别与联系
- 标准盒子模型和IE盒子模型的区别
- 关于旅游景点主题的HTML网页设计——北京景点 7页(带订单购物车)