Android一级购物车简单实现
来源:互联网 发布:淘宝店铺装修页头没了 编辑:程序博客网 时间:2024/04/29 04:26
MainActivity类
package wangyetian.bwie.com.shopcar;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.CheckBox;import android.widget.TextView;import com.google.gson.Gson;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private RecyclerView ry; private List<ShopBean.OrderDataBean.CartlistBean> mAllOrderList = new ArrayList<>(); private RecyclerView mRy; private CheckBox mQuan; private TextView mZPrice; private TextView mZCount; private int price=0; private int count=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); mRy.setLayoutManager(new LinearLayoutManager(this)); getData(); final Adapter adapter = new Adapter(this, mAllOrderList); mRy.setAdapter(adapter); //监听适配类回调的方法 用于计算总价和总数量 还有给全选赋值 adapter.setonClickCbListener(new Adapter.onClickCbListener() { @Override public void onCBListener(boolean flag, List<ShopBean.OrderDataBean.CartlistBean> mList) { mAllOrderList = mList; mQuan.setChecked(flag); for (int i = 0; i < mList.size(); i++) { if (mList.get(i).isCheck()){ price += mList.get(i).getPrice()*mList.get(i).getCount(); count += mList.get(i).getCount(); } } mZPrice.setText(price +""); mZCount.setText(count +""); price =0; count =0; } }); //全选的点击事件 mQuan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean flag = mQuan.isChecked(); if (adapter != null){ adapter.getCB(flag); } } }); } private void initView() { mRy = (RecyclerView) findViewById(R.id.ry); mQuan = (CheckBox) findViewById(R.id.quan); mZPrice = (TextView) findViewById(R.id.zPrice); mZCount = (TextView) findViewById(R.id.zCount); } public void getData() { 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++) { mAllOrderList.add(shopBean.getOrderData().get(i).getCartlist().get(j)); } } } catch (Exception e) { e.printStackTrace(); } } public static String convertStreamToString(InputStream is) { /* * To convert the InputStream to String we use the BufferedReader.readLine() * method. We iterate until the BufferedReader return null which means * there's no more data to read. Each line will appended to a StringBuilder * and returned as String. */ 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(); }}
自定义控件类
package wangyetian.bwie.com.shopcar;import android.content.Context;import android.content.res.TypedArray;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;/** * Created by hp on 2017/11/18. */public class AmountView extends LinearLayout { private static final String TAG = "AmountView"; private int amount = 1; //购买数量 private OnAmountChangeListener mListener; private EditText etAmount; private Button btnDecrease; private Button btnIncrease; public void setEtAmount(int count) { etAmount.setText(count +""); } public AmountView(Context context) { this(context, null); } public AmountView(Context context, final AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.zdy, this); etAmount = (EditText) findViewById(R.id.etAmount); btnDecrease = (Button) findViewById(R.id.btnDecrease); btnIncrease = (Button) findViewById(R.id.btnIncrease); TypedArray obtainStyledAttributes = getContext().obtainStyledAttributes(attrs, R.styleable.AmountView); obtainStyledAttributes.recycle(); //减 btnDecrease.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { amount = Integer.parseInt(etAmount.getText().toString()); if (amount > 1) { amount--; etAmount.setText(amount + ""); } //回调到适配类 mListener.onAmountChange(amount); } }); //加 btnIncrease.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { amount = Integer.parseInt(etAmount.getText().toString()); amount++; etAmount.setText(amount + ""); mListener.onAmountChange(amount); } }); } public interface OnAmountChangeListener { void onAmountChange(int amount); } public void setOnAmountChangeListener(OnAmountChangeListener onAmountChangeListener){ mListener = onAmountChangeListener; }}
适配器
package wangyetian.bwie.com.shopcar;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.CheckBox;import android.widget.TextView;import java.util.List;/** * Created by hp on 2017/11/18. */public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<ShopBean.OrderDataBean.CartlistBean> list; private Context context; private onClickCbListener onClickCbListener; public Adapter(Context context, List<ShopBean.OrderDataBean.CartlistBean> list) { this.context = context; this.list = list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context,R.layout.ry_item,null); ViewHolder1 viewHolder1 = new ViewHolder1(view); return viewHolder1; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { final ViewHolder1 mHolder = (ViewHolder1) holder; mHolder.cb.setChecked(list.get(position).isCheck()); mHolder.price.setText(list.get(position).getPrice()+""); mHolder.zdy.setEtAmount(list.get(position).getCount()); //多选框点击 mHolder.cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //重新给集合赋值 list.get(position).setCheck(mHolder.cb.isChecked()); notifyChanged(position); } }); //自定义控件 mHolder.zdy.setOnAmountChangeListener(new AmountView.OnAmountChangeListener() { @Override public void onAmountChange(int amount) { //把变化后的数量重新赋给集合 list.get(position).setCount(amount); notifyChanged(position); } }); //删除的点击事件 mHolder.del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { list.remove(position); notifyChanged(position); } }); } //刷新和回调 public void notifyChanged(int position){ boolean flag = true; for (int i = 0; i < list.size(); i++) { if (!list.get(i).isCheck()){ flag = false; break; } } notifyDataSetChanged(); onClickCbListener.onCBListener(flag,list); } //全选的方法 public void getCB(boolean flag){ for (int i = 0; i < list.size(); i++) { list.get(i).setCheck(flag); } notifyDataSetChanged(); onClickCbListener.onCBListener(flag,list); } interface onClickCbListener{ void onCBListener(boolean flag,List<ShopBean.OrderDataBean.CartlistBean> mList); } public void setonClickCbListener(onClickCbListener onClickCbListener){ this.onClickCbListener = onClickCbListener; } @Override public int getItemCount() { return list.size(); } class ViewHolder1 extends RecyclerView.ViewHolder{ TextView price; CheckBox cb; AmountView zdy; Button del; public ViewHolder1(View itemView) { super(itemView); price = itemView.findViewById(R.id.price); cb = itemView.findViewById(R.id.cb); zdy = itemView.findViewById(R.id.zdy); del = itemView.findViewById(R.id.del); } }}
bean类
package wangyetian.bwie.com.shopcar;import java.util.List;/** * Created by hp on 2017/11/17. */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":"黑色","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}]},{"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}]},{"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}]},{"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}]}] */ 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":"黑色","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}] */ 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 : 黑色 * size : 18L * price : 20 * count : 1 */ private int id; private int shopId; private String shopName; private String defaultPic; private int productId; private String productName; private String color; private String size; private int price; private int count; private boolean check; 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 String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getSize() { return size; } public void setSize(String 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 isCheck() { return check; } public void setCheck(boolean check) { this.check = check; } } }}
MainActivity布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="wangyetian.bwie.com.shopcar.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/ry" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal"> <CheckBox android:id="@+id/quan" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/zPrice" android:layout_width="100dp" android:layout_height="50dp" /> <TextView android:id="@+id/zCount" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout></LinearLayout>
自定义控件布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <Button android:id="@+id/btnDecrease" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="#f00" android:gravity="center" android:text="-" /> <EditText android:id="@+id/etAmount" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" android:background="@null" android:gravity="center" android:inputType="number" android:minWidth="60dp" android:text="1" /> <Button android:id="@+id/btnIncrease" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="#f0f" android:gravity="center" android:text="+" /></LinearLayout>
底部布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="100dp" android:orientation="horizontal"> <CheckBox android:id="@+id/cb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical"/> <TextView android:id="@+id/price" android:layout_width="200dp" android:layout_height="100dp" android:gravity="center"/> <wangyetian.bwie.com.shopcar.AmountView android:id="@+id/zdy" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" /> <Button android:id="@+id/del" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="删除"/></LinearLayout>
attrs文件
<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="AmountView"> <!-- 左右2边+-按钮的宽度 --> <attr name="btnWidth" format="dimension" /> <!-- 中间TextView的宽度 --> <attr name="tvWidth" format="dimension" /> <!--<attr name="tvColor" format="color"/>--> <attr name="tvTextSize" format="dimension"/> <attr name="btnTextSize" format="dimension"/> </declare-styleable></resources>
阅读全文
0 0
- Android一级购物车简单实现
- android 实现简单的一级购物车
- Android-RecyclerView--实现一级购物车简单功能
- 000001简单一级购物车的实现
- 简单实现 一级列表购物车(固定数据)
- 购物车一级列表的简单实现(访问接口数据)
- 一级列表购物车的简单实现(网络接口)
- android一级列表购物车
- Android——EventBus实现一级购物车
- Android实现简单购物车
- 一级购物车实现添加数据
- android实现简单的购物车
- Android-RecyclerView实现购物车简单功能
- Android-RecyclerView实现购物车简单功能
- Android--ExpandableListview购物车简单功能实现
- 一级列表购物车
- 一级购物车
- 一级列表购物车
- 【Java学习4.5】数组类型
- 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
- 重构培训课程后的一些感想
- HDU2693 骨头收藏家II(第k大背包)
- error: command 'gcc' failed with exit status 1
- Android一级购物车简单实现
- AngularJS购物车
- boost interprocess 进程通信
- Java(31):数据结构排序---对接口 Comparable<T> 与 接口 Comparator<T> 的区别理解
- golang log模块之log4go使用介绍
- 网络问题检查
- 海量数据处理
- Java NIO原理 图文分析及代码实现
- 第四届miac安全赛第二阶段writeup