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 用到的javaBean

public 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);    }}


结束



原创粉丝点击