RecyclerView实现购物车
来源:互联网 发布:alien skin bokeh mac 编辑:程序博客网 时间:2024/06/05 08:49
下面是效果图
所需依赖
Recyclerview依赖
compile 'com.android.support:recyclerview-v7:25.3.1'
EventBus 依赖
compile 'org.greenrobot:eventbus:3.0.0'
具体代码
1.主布局
主布局xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="40dp" > <ImageView android:layout_width="30dp" android:layout_height="30dp" android:layout_centerVertical="true" android:background="@drawable/back" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="购物车" android:layout_centerInParent="true" /> </RelativeLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" ></android.support.v7.widget.RecyclerView><LinearLayout android:layout_width="match_parent" android:layout_height="60dp" android:background="#ffffff" android:orientation="horizontal" android:gravity="center_vertical" > <CheckBox android:id="@+id/quan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全选" /> <TextView android:id="@+id/heji" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="合计:$0.0" android:textColor="#000000" android:layout_marginLeft="100dp" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="150dp" android:layout_alignParentRight="true" android:background="#f00" android:gravity="center" android:id="@+id/suan" android:layout_height="match_parent"> <TextView android:id="@+id/jiesuan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" android:text="去结算(0)" /> </LinearLayout> </RelativeLayout></LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginBottom="60dp" android:background="#D6D6D6" /></LinearLayout>
看到主布局可以看到里面其实只有一个recyclerview
子布局
子布局xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="60dp" android:orientation="horizontal" android:gravity="center_vertical" > <CheckBox android:id="@+id/fshop" android:layout_width="wrap_content" android:layout_marginLeft="10dp" android:layout_height="wrap_content" /> <TextView android:id="@+id/dp" android:layout_width="wrap_content" android:layout_marginLeft="5dp" android:layout_height="wrap_content" android:text="JD 京东自营" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="#ffffff" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="在买一百件可打折" android:textSize="10sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="right" android:layout_alignParentRight="true" android:text="去凑单>" android:textSize="10sp" android:textColor="#f00" /> </RelativeLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recycle" android:overScrollMode="never" android:layout_width="match_parent" android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView> </LinearLayout></LinearLayout>子布局里面还有一个recyclrview(因为一个商铺可以有许多商品)第二个recyclerview子条目
xml文件
<?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="wrap_content" android:orientation="horizontal" > <CheckBox android:id="@+id/zshop" android:layout_gravity="center_vertical" android:layout_width="wrap_content" android:layout_marginLeft="10dp" android:layout_height="wrap_content" /> <ImageView android:id="@+id/Simage" android:layout_width="100dp" android:layout_height="100dp" android:background="@mipmap/ic_launcher" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/Stitle" android:textSize="12sp" android:layout_marginRight="15dp" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:text="啊哈哈哈哈哈哈啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊" /> <LinearLayout android:layout_width="match_parent" android:layout_height="20dp" android:orientation="horizontal" > <TextView android:id="@+id/Sprice" android:layout_width="wrap_content" android:layout_height="20dp" android:gravity="bottom" android:textColor="#f00" android:text="价格:12433243" /> <TextView android:id="@+id/num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="数量: X 0" android:layout_marginLeft="30dp" /> </LinearLayout> </LinearLayout></LinearLayout>以上就是全部的布局文件了下面是 适配器代码第一个的适配器
import android.content.Context;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.CheckBox;import android.widget.TextView;import com.bwie.test.R;import com.bwie.test.bean.B3;import com.bwie.test.bean.CartShop;import org.greenrobot.eventbus.EventBus;import java.util.List;public class CartAdapter extends RecyclerView.Adapter<CartAdapter.MyViewHolder>{ private Context context; private List<CartShop.DataBean> datas; public CartAdapter(Context context, List<CartShop.DataBean> datas) { this.context = context; this.datas = datas; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= LayoutInflater.from(context).inflate(R.layout.cart_item,parent,false); MyViewHolder holder=new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { final CartShop.DataBean data = datas.get(position); holder.f_checkbox.setChecked(data.getChecked()); //店铺的点击监听 holder.f_checkbox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //更改 存储 当前状态 data.setChecked(holder.f_checkbox.isChecked()); //处理所属商品 for(CartShop.DataBean.ListBean ss:datas.get(position).getList()) { ss.setChecked(holder.f_checkbox.isChecked()); } //遍历结束刷新适配器 notifyDataSetChanged(); //定义变量 Boolean xx=true; double price=0.0; int num=0; //遍历 判断 for(CartShop.DataBean da:datas) { //有 ,没选中的 if(!da.getChecked()) { xx=false; } for(CartShop.DataBean.ListBean bean:da.getList()) { if(bean.getChecked()) { price+=(bean.getNum()*bean.getPrice()); } if(bean.getChecked()) { num++; } } } //回调全选 EventBus.getDefault().post(new B3(xx,price,num)); } }); holder.dp.setText(data.getSellerName()); List<CartShop.DataBean.ListBean> list =datas.get(position).getList(); holder.recycle.setLayoutManager(new LinearLayoutManager(context)); CartItemAdapter adapter=new CartItemAdapter(context,list,position); holder.recycle.setAdapter(adapter); } @Override public int getItemCount() { return datas!=null?datas.size():0; } public class MyViewHolder extends RecyclerView.ViewHolder { public RecyclerView recycle; public CheckBox f_checkbox; public TextView dp; public MyViewHolder(View itemView) { super(itemView); recycle= (RecyclerView) itemView.findViewById(R.id.recycle); f_checkbox= (CheckBox) itemView.findViewById(R.id.fshop); dp= (TextView) itemView.findViewById(R.id.dp); } }}第二个适配器import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.TextView;import com.bwie.test.R;import com.bwie.test.bean.B4;import com.bwie.test.bean.CartShop;import com.squareup.picasso.Picasso;import org.greenrobot.eventbus.EventBus;import java.util.List;public class CartItemAdapter extends RecyclerView.Adapter<CartItemAdapter.MyViewHolder> { private Context context; private List<CartShop.DataBean.ListBean> list; private int biaoshi=0; public CartItemAdapter(Context context, List<CartShop.DataBean.ListBean> list, int biaoshi) { this.context = context; this.list = list; this.biaoshi = biaoshi; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= LayoutInflater.from(context).inflate(R.layout.acrt_item_item,parent,false); MyViewHolder holder=new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(final MyViewHolder holder, int position) { final CartShop.DataBean.ListBean data= list.get(position); holder.z_checkbox.setChecked(data.getChecked()); //店铺下每一个商品的点击监听 holder.z_checkbox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //更改 存储 当前状态 data.setChecked(holder.z_checkbox.isChecked()); //定义变量 Boolean xx=true; //遍历 判断 for(CartShop.DataBean.ListBean da:list) { if(!da.getChecked()) { xx=false; } } //回调 店铺状态 EventBus.getDefault().post(new B4(biaoshi,xx)); } }); //处理 图片路径 String[] url=data.getImages().split("\\|"); Picasso.with(context).load(url[0]).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(holder.Simage); holder.Stitle.setText(data.getTitle()); holder.Sprice.setText("¥:"+data.getPrice()+""); holder.num.setText("数量: X "+data.getNum()); } @Override public int getItemCount() { return list!=null?list.size():0; } public class MyViewHolder extends RecyclerView.ViewHolder { public CheckBox z_checkbox; public ImageView Simage; public TextView Stitle; public TextView Sprice; public TextView num; public MyViewHolder(View itemView) { super(itemView); z_checkbox= (CheckBox) itemView.findViewById(R.id.zshop); Simage= (ImageView) itemView.findViewById(R.id.Simage); Stitle= (TextView) itemView.findViewById(R.id.Stitle); Sprice= (TextView) itemView.findViewById(R.id.Sprice); num= (TextView) itemView.findViewById(R.id.num); } }}
Activity代码
这是我使用EventBus 进行通信的,并且是适配器给activity发送消息,在做处理
,也可以两个适配器里使用EventBus进行通信,也可以接口回调等
EventBus 用到的javaBeanpublic class B3 { private Boolean isChecked; private double price; private int num; public B3(Boolean isChecked, double price, int num) { this.isChecked = isChecked; this.price = price; this.num = num; } public double getPrice() { return price; } public Boolean getChecked() { return isChecked; } public int getNum() { return num; }}EventBus 用到的javaBean
public class B4 { private int position; private Boolean isChecked; public B4(int position, Boolean isChecked) { this.position = position; this.isChecked = isChecked; } public int getPosition() { return position; } public void setPosition(int position) { this.position = position; } public Boolean getChecked() { return isChecked; } public void setChecked(Boolean checked) { isChecked = checked; }}//点击商铺的回调@Subscribepublic void ada(B3 b3){ quan.setChecked(b3.getChecked()); heji.setText("合计:$"+b3.getPrice()); jiesuan.setText("去结算("+b3.getNum()+")");}//点击商品的回调@Subscribepublic void bda(B4 b4){ CartShop.DataBean dataBean = datas.get(b4.getPosition()); //小小优化 if(!(dataBean.getChecked()==b4.getChecked())) { dataBean.setChecked(b4.getChecked()); adapter.notifyDataSetChanged(); } //在判断 联动全选 //遍历 Boolean xx=true; double price=0.0; int num=0; for(CartShop.DataBean da:datas) { if(!da.getChecked()) { xx=false; } for(CartShop.DataBean.ListBean bean:da.getList()) { if(bean.getChecked()) { price+=(bean.getNum()*bean.getPrice()); num++; } } } heji.setText("合计:$"+price); jiesuan.setText("去结算("+num+")"); if(!(quan.isChecked()==xx)) { quan.setChecked(xx); }}
结束
阅读全文
0 0
- RecyclerView实现购物车
- 购物车Recyclerview实现
- RecyclerView实现购物车
- Recyclerview嵌套Recyclerview实现简单购物车
- RecyclerView 实现购物车功能
- 使用RecyclerView实现购物车
- 使用RecyclerView+OkHttp实现购物车
- Android-RecyclerView实现购物车简单功能
- Android-RecyclerView实现购物车简单功能
- 购物车Recyclerview
- 用RecyclerView多布局实现购物车+随便逛一逛
- RecyclerView实现购物车的全选、反选功能
- Android-RecyclerView--实现一级购物车简单功能
- Android 双RecyclerView嵌套实现购物车逻辑
- Android 实现RecyclerView嵌套RecyclerView 实现购物车的全选 反选 单选 商家全选
- 换种思路实现RecyclerView嵌套RecyclerView(购物车)复杂效果
- RecyclerView 购物车 二级列表
- OkHttp+RecyclerView购物车(二)
- angular之设置屏蔽字
- 【状压DP+矩阵乘法】51Nod1311[转换机]题解
- HDU 1599(floyd)(求最小回路问题)
- win10下安装Mapx5.0进行MFC开发的方法
- 饮料代理想要站稳市场,该如何做?
- RecyclerView实现购物车
- 贝叶斯引论(一)
- AngularJs路由查删
- 谷歌的量子计算机如何改变世界
- 人工智能对医疗行业影响的专题研究:基本结论
- 2018 年将打响 AI 战争,7 条实战经验帮你战胜恐惧
- 靠这些技术炒股你不一定会死,但一定会是主席最牵挂的人
- HTTP协议状态码大全
- C语言分离单词问题(倒置)