热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

淘宝购物车功能的实现

导入依赖compilecom.android.support:recyclerview-v7:25.3.1compilecom.google.code.gson:gson:
//导入依赖
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 list = new ArrayList();    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  {
    private Context context;
    private List list;

    public ShopAdapter(Context context, List list) {
        this.cOntext= context;
        this.list = list;
    }

    @Override
    public 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;
    }

    @Override
    public 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() {
             @Override
             public 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() {
             @Override
             public void onChange(int count) {
                 list.get(position).setCount(count);
                 notifyDataSetChanged();
                 if(listener != null){
                     listener.check(list.get(position).isSelect(),position);
                 }
             }
         });
      }
    }

    @Override
    public 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() {
            @Override
            public 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() {
            @Override
            public 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() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
            @Override
            public 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 orderData;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public List getOrderData() {
        return orderData;
    }

    public void setOrderData(List 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 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 getCartlist() {
            return cartlist;
        }

        public void setCartlist(List 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;
            }
        }
    }
}

//布局
//主类布局



    
        
        
        

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
        }
      ]
    }


  ]
}

推荐阅读
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • Android源码中的Builder模式及其作用
    本文主要解释了什么是Builder模式以及其作用,并结合Android源码来分析Builder模式的实现。Builder模式是将产品的设计、表示和构建进行分离,通过引入建造者角色,简化了构建复杂产品的流程,并且使得产品的构建可以灵活适应变化。使用Builder模式可以解决开发者需要关注产品表示和构建步骤的问题,并且当构建流程发生变化时,无需修改代码即可适配新的构建流程。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • JS实现一键分享功能
    本文介绍了如何使用JS实现一键分享功能,并提供了2019独角兽企业招聘Python工程师的标准。同时,给出了分享到QQ空间、新浪微博和人人网的链接。 ... [详细]
  • Java图形化计算器设计与实现
    本文介绍了使用Java编程语言设计和实现图形化计算器的方法。通过使用swing包和awt包中的组件,作者创建了一个具有按钮监听器和自定义界面尺寸和布局的计算器。文章还分享了在图形化界面设计中的一些心得体会。 ... [详细]
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
author-avatar
mobiledu2502924121
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有