电商项目中常常有购物车这个功能,做个很多项目了,都有不同的界面,选了一个来讲一下。

RecyclerView 模仿淘宝购物车功能(删除选择商品,商品计算,选择, 全选反选,商品数量加减等)

看看效果图:

Activity代码:

  1. /*****
  2. * RecyclerView 模仿淘宝购物车功能
  3. *
  4. * 删除选择商品,商品计算,选择,全选反选,商品数量加减等
  5. *
  6. */
  7. public class MainActivity extends AppCompatActivity {
  8.  
  9. private RecyclerView rvNestDemo;
  10. private CartAdapter cartAdapter;
  11. CartInfo cartInfo;
  12. double price;
  13. int num;
  14.  
  15. TextView cartNum;
  16. TextView cartMoney;
  17. Button cartShoppMoular;
  18. CheckBox checkBox;
  19.  
  20. private TextView btnDelete;
  21.  
  22. @Override
  23. protected void onCreate(@Nullable Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.activity_main);
  26. rvNestDemo = (RecyclerView) findViewById(R.id.rv_nest_demo);
  27. cartNum = findViewById(R.id.cart_num);
  28. cartMoney = findViewById(R.id.cart_money);
  29. cartShoppMoular = findViewById(R.id.cart_shopp_moular);
  30. cartShoppMoular.setOnClickListener(new OnClickListener());
  31. checkBox = findViewById(R.id.cbx_quanx_check);
  32. checkBox.setOnClickListener(new OnClickListener());
  33. btnDelete = (TextView) findViewById(R.id.btn_delete);
  34. initView();
  35. }
  36.  
  37. private void initView() {
  38. btnDelete.setOnClickListener(new OnClickListener());
  39. showData();
  40. rvNestDemo.setLayoutManager(new LinearLayoutManager(this));
  41. DividerItemDecoration itemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
  42. itemDecoration.setDrawable(ContextCompat.getDrawable(this, R.drawable.line_divider_inset));
  43. rvNestDemo.addItemDecoration(itemDecoration);
  44. cartAdapter = new CartAdapter(this, cartInfo.getData());
  45. rvNestDemo.setAdapter(cartAdapter);
  46. showExpandData();
  47.  
  48. }
  49.  
  50. private void showExpandData() {
  51. /**
  52. * 全选
  53. */
  54. cartAdapter.setOnItemClickListener(new OnViewItemClickListener() {
  55. @Override
  56. public void onItemClick(boolean isFlang, View view, int position) {
  57. cartInfo.getData().get(position).setIscheck(isFlang);
  58. int length = cartInfo.getData().get(position).getItems().size();
  59. for (int i = 0; i < length; i++) {
  60. cartInfo.getData().get(position).getItems().get(i).setIscheck(isFlang);
  61. }
  62. cartAdapter.notifyDataSetChanged();
  63. showCommodityCalculation();
  64. }
  65. });
  66.  
  67. /**
  68. * 计算价钱
  69. */
  70. cartAdapter.setOnItemMoneyClickListener(new OnItemMoneyClickListener() {
  71. @Override
  72. public void onItemClick(View view, int position) {
  73. showCommodityCalculation();
  74. }
  75.  
  76. });
  77. }
  78.  
  79. /***
  80. * 计算商品的数量和价格
  81. */
  82. private void showCommodityCalculation() {
  83. price = 0;
  84. num = 0;
  85. for (int i = 0; i < cartInfo.getData().size(); i++) {
  86. for (int j = 0; j < cartInfo.getData().get(i).getItems().size(); j++) {
  87. if (cartInfo.getData().get(i).getItems().get(j).ischeck()) {
  88. price += Double.valueOf((cartInfo.getData().get(i).getItems().get(j).getNum() * Double.valueOf(cartInfo.getData().get(i).getItems().get(j).getPrice())));
  89. num++;
  90. } else {
  91. checkBox.setChecked(false);
  92. }
  93. }
  94. }
  95. if (price == 0.0) {
  96. cartNum.setText("共0件商品");
  97. cartMoney.setText("¥ 0.0");
  98. return;
  99. }
  100. try {
  101. String money = String.valueOf(price);
  102. cartNum.setText("共" + num + "件商品");
  103. if (money.substring(money.indexOf("."), money.length()).length() > 2) {
  104. cartMoney.setText("¥ " + money.substring(0, (money.indexOf(".") + 3)));
  105. return;
  106. }
  107. cartMoney.setText("¥ " + money.substring(0, (money.indexOf(".") + 2)));
  108. } catch (Exception e) {
  109. e.printStackTrace();
  110. }
  111. }
  112.  
  113. private void showData() {
  114. cartInfo = JSON.parseObject(JSONDATA(), CartInfo.class);
  115. }
  116.  
  117. private class OnClickListener implements View.OnClickListener {
  118. @Override
  119. public void onClick(View v) {
  120. switch (v.getId()) {
  121.  
  122. //全选和不全选
  123. case R.id.cbx_quanx_check:
  124. if (checkBox.isChecked()) {
  125. int length = cartInfo.getData().size();
  126. for (int i = 0; i < length; i++) {
  127. cartInfo.getData().get(i).setIscheck(true);
  128. int lengthn = cartInfo.getData().get(i).getItems().size();
  129. for (int j = 0; j < lengthn; j++) {
  130. cartInfo.getData().get(i).getItems().get(j).setIscheck(true);
  131. }
  132. }
  133.  
  134. } else {
  135. int length = cartInfo.getData().size();
  136. for (int i = 0; i < length; i++) {
  137. cartInfo.getData().get(i).setIscheck(false);
  138. int lengthn = cartInfo.getData().get(i).getItems().size();
  139. for (int j = 0; j < lengthn; j++) {
  140. cartInfo.getData().get(i).getItems().get(j).setIscheck(false);
  141. }
  142. }
  143. }
  144. cartAdapter.notifyDataSetChanged();
  145. showCommodityCalculation();
  146. break;
  147. case R.id.btn_delete:
  148. //删除选中商品
  149. cartAdapter.removeChecked();
  150. showCommodityCalculation();
  151. break;
  152. case R.id.cart_shopp_moular:
  153. Toast.makeText(MainActivity.this,"提交订单: "+cartMoney.getText().toString()+"元",Toast.LENGTH_LONG).show();
  154. break;
  155. }
  156. }
  157. }

这是我写的第二个购物车,基本的功能都有了的。

有需要的小伙们,可以参考一下。

代码下载:https://github.com/DickyQie/android-shoppingcart/tree/tb-cart/

android ------ RecyclerView 模仿淘宝购物车的更多相关文章

  1. 仿淘宝购物车demo---增加和减少商品数量

    在上一篇博客中,小编简单的介绍了如何使用listview来实现购物车,但是仅仅是简单的实现了列表的功能,随之而来一个新的问题,买商品的时候,我们可能不止想买一件商品,想买多个,或许有因为某种原因点错了 ...

  2. 淘宝购物车页面 智能搜索框Ajax异步加载数据

    如果有朋友对本篇文章的一些知识点不了解的话,可以先阅读此篇文章.在这篇文章中,我大概介绍了一下构建淘宝购物车页面需要的基础知识. 这篇文章主要探讨的是智能搜索框Ajax异步加载数据.jQuery的社区 ...

  3. 淘宝购物车页面 PC端和移动端实战

    最近花了半个月的时间,做了一个淘宝购物车页面的Demo.当然,为了能够更加深入的学习,不仅仅有PC端的固定宽度的布局,还实现了移动端在Media Query为768px以下(也就是实现了ipad,ip ...

  4. Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片

    Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片 自定义ADPager 自定义水平滚动的ScrollView效仿ViewPager 当遇到要在Vie ...

  5. jQuery实现淘宝购物车小组件

    我爱撸码,撸码使我感到快乐! 大家好,我是Counter,本章将实现淘宝购物车小组件, 用原生js可以实现吗,当然可以,可是就是任性一回,就是想用jQuery 来实现下.HTML代码不多才4行,CSS ...

  6. vue实现淘宝购物车功能

    淘宝购物车功能,效果如下图 非常简单的逻辑,没有做代码的封装,代码如下 <div class="list-container"> <div class=" ...

  7. 漂亮!Javascript代码模仿淘宝宝贝搜索结果的分页显示效果

    分页按钮思想: 1.少于9页,全部显示 2.大于9页,1.2页显示,中间页码当前页为中心,前后各留两个页码 先看效果图: 01输入框焦点效果 02效果 模仿淘宝的分页按钮效果控件kkpager  JS ...

  8. web——自己实现一个淘宝购物车页面

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  9. Android仿淘宝购物车demo

    夏的热情渐渐退去,秋如期而至,丰收的季节,小编继续着实习之路,走着走着,就走到了购物车,逛过淘宝或者是京东的小伙伴都知道购物车里面的宝贝可不止一件,对于爱购物的姑娘来说,购物车里面的商品恐怕是爆满,添 ...

随机推荐

  1. [java] 在linux+chrome/firefox上使用java applet

    我现在的浏览器用不了java applet,我的环境是archlinux + chrome or firefox. java网站的指引是这样说的 按照这些说明操作,以便在 Ubuntu Linux 上 ...

  2. Please run SwitchHosts! as an Administrator 原因

    github 访问慢的初期,不得已修改host,但直接修改host的文件太不够灵活了,使用switchhost工具. win10 遇到上述问题如这个地址 要撞墙了. 解决方法: 进入 C:\Windo ...

  3. Spring Data JPA框架

    1.前言 扔一个 spring data jpa 的代码,可运行,后续补充博客内容. 环境:eclipse + tomcat8 2.部分截图 3.源码 https://gitee.com/niceyo ...

  4. 增加wamp64 PHP支持版本

    1.停止WAMP服务器.2.下载要安装的PHP版本.下载Window版本的ZIP包啦:http://php.net/downloads.php.解压到 Wamp的安装目录C:\wamp64\bin\p ...

  5. ORACLE中关于使用between在MyBatis中取不同的区间值和取反

    最近在项目中使用between取不同的区间值问题,由于区间跨度大,而且区间多,又是前端传过来的参数,所以使用in和exists比较麻烦.然后就考虑使用between.现将使用方法记录一下. 假如表有个 ...

  6. 131A

    #include <stdio.h> #include <string.h> #include <stdbool.h> #define MAXSIZE 105 in ...

  7. stl string的erase方法

    ; i < s.size(); i++) { ') { s.erase(i,); i--; } } 删除string中的所有0.

  8. android studio相关配置

    启动出现:Unable to access Android SDK add-on list 解决: Android Studio First Run 检测 Android SDK 及更新,由于众所周知 ...

  9. java Quartz定时器任务与Spring 的实现

    1.xml配置 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http:/ ...

  10. C#ImageList和ListView的使用

    一.ImageList  ImageList组件,又称为图片存储组件,它主要用于存储图片资源,然后在控件上显示出来,这样就简化了对图片的管理.ImageList组件的主要属性是Images,它包含关联 ...