购物车一级列表的简单实现(访问接口数据)

导入依赖

 compile 'com.squareup.okhttp3:okhttp:3.9.0'
    compile 'com.google.code.gson:gson:2.8.2'
    compile 'com.android.support:recyclerview-v7:25.0.0'
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

bean实体类里面加入一个字段,,用来控制 每个商品前面checkbox的选中状态

private boolean check;
public boolean isCheck() {
                return check;
            }

            public void setCheck(boolean check) {
                this.check = check;
            }

values下面的colors.xml,方便布局里面的统一调用

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>

    <!--背景颜色-->
    <color name="toolbar_color">#f8f8f8</color>
    <color name="background_color">#f6f6f6</color>
    <color name="edittext_noenter_color">#f5f5f5</color>

    <!--辅助色-->
    <color name="support_yellow">#f9a340</color>
    <color name="btn_unselect_color">#f4736e</color>

    <!--分割线-->
    <color name="splitline_color">#dddddd</color>

    <!--文字-->
    <color name="notice_text_color">#999999</color>
    <color name="default_text_color">#666666</color>
    <color name="main_black_text">#333333</color>
    <color name="main_red_text">#e53e42</color>
    <color name="main_white_text">#ffffff</color>
    <color name="protocol_text">#3C68FE</color>

    <!--图标-->
    <color name="abate_icon_color">#bbbbbb</color>
    <color name="default_icon_color">#999999</color>
    <color name="pressed_icon_color">#e53e42</color>

    <!--CycleViewPager-->
    <color name="cycle_image_bg">#44222222</color>

    <!-- 透明 -->
    <color name="transparent">#00000000</color>;
  </resources>
去结算 这个文字的背景 自己画的小圆点

<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <corners android:radius="200dp"></corners>
    <solid android:color="@color/pressed_icon_color"></solid>
</shape>

activity_main.xml里面的布局 ,上面是一个recyclerview ,下面是一个linearlayout,装着全选 ,总价,总数量,去结算等

<?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:orientation="vertical"
    android:layout_height="match_parent"
    >

    <android.support.v7.widget.RecyclerView
                android:id="@+id/second_recyview"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                />

    <LinearLayout
            android:layout_alignBottom="@+id/linear"
            android:padding="10dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:background="@color/main_white_text"
            android:gravity="center_vertical"
            android:id="@+id/ll_pay"
            android:layout_alignParentBottom="true"
            >

        <CheckBox
            android:button="@null"
            android:id="@+id/quanxuan"
            android:background="@drawable/shopcart_unselected"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

            <TextView
                android:textSize="23sp"
                android:id="@+id/all_select"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="全选"
                android:drawablePadding="5dp"
                />

            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:orientation="vertical"
                >

                <TextView
                    android:id="@+id/totalprice"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingLeft="10dp"
                    android:paddingTop="10dp"
                    android:text="总价:¥0"
                    android:textColor="@color/main_red_text"
                    android:textSize="20sp"
                    />

                <TextView
                    android:id="@+id/totalnum"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingLeft="10dp"
                    android:text="共0件商品"
                    android:textSize="18sp"
                    android:paddingBottom="10dp"
                    />

            </LinearLayout>

            <TextView
                android:id="@+id/qujiesuan"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/login_btn"
                android:text="去结算"
                android:textSize="23sp"
                android:paddingLeft="30dp"
                android:paddingRight="30dp"
                android:paddingTop="10dp"
                android:paddingBottom="10dp"
                android:textColor="@color/main_white_text"
                android:layout_marginRight="10dp"
                />

        </LinearLayout>

</LinearLayout>
recyclerview的适配器的布局 ,,里面引入了自定义的customview的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            >

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/background_color"
                ></View>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <ImageView
                    android:id="@+id/shopcart_cloth_select"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/shopcart_selected"
                    android:layout_marginLeft="15dp"
                    android:layout_marginRight="15dp"
                    android:visibility="invisible"
                    />

                <TextView
                    android:id="@+id/tv_item_shopcart_clothname"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="穿秋装情侣字母徽章风衣"
                    android:paddingLeft="10dp"
                    android:paddingTop="10dp"
                    android:textSize="20sp"
                    />
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:gravity="center_vertical"
                >

                <CheckBox
                    android:id="@+id/cb_item_shopcart_clothselect"
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:layout_marginLeft="10dp"
                    />

                <ImageView
                    android:src="@mipmap/ic_launcher"
                    android:id="@+id/iv_item_shopcart_cloth_pic"
                    android:layout_width="90dp"
                    android:layout_height="90dp"
                    android:layout_margin="10dp"
                    />

                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:orientation="vertical"
                    >

                    <TextView
                        android:id="@+id/tv_item_shopcart_cloth_price"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="¥185"
                        android:textColor="@color/main_red_text"
                        android:textSize="20sp"
                        />

                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="5dp"
                        android:layout_marginBottom="5dp"
                        >

                        <TextView
                            android:id="@+id/tv_item_shopcart_cloth_color"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="颜色:黑色"
                            android:textSize="18sp"
                            />

                        <TextView
                            android:id="@+id/tv_item_shopcart_cloth_size"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="尺寸:XL"
                            android:textSize="18sp"
                            android:layout_marginLeft="10dp"
                            />

                    </LinearLayout>

                    <com.example.a171118_zhouliu_disanzhou.custom.CustomView
                        android:layout_width="100dp"
                        android:layout_height="50dp"
                        android:id="@+id/custom_View"
                        android:layout_marginLeft="20dp"/>

                </LinearLayout>

                <View
                    android:layout_width="1dp"
                    android:layout_height="match_parent"
                    android:layout_marginTop="10dp"
                    android:layout_marginBottom="10dp"
                    android:background="@color/splitline_color"
                    ></View>

                <ImageView
                    android:id="@+id/iv_item_shopcart_cloth_delete"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:padding="20dp"
                    android:src="@drawable/shopcart_delete"
                    />

            </LinearLayout>

        </LinearLayout>

    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/background_color"
        ></View>

</LinearLayout>

自定义组合控件的customview的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="match_parent">

    <Button
        android:background="#00FFFFFF"
        android:gravity="center"
        android:textStyle="bold"
        android:textSize="20sp"
        android:text="一"
        android:id="@+id/reverse"
        android:layout_width="50dp"
        android:layout_height="30dp" />

    <EditText
        android:id="@+id/count"
        android:textSize="23sp"
        android:textStyle="bold"
        android:text="1"
        android:layout_width="wrap_content"
        android:layout_height="50dp" />

    <Button
        android:textStyle="bold"
        android:textSize="22sp"
        android:id="@+id/add"
        android:gravity="center"
        android:background="#00FFFFFF"
        android:layout_width="50dp"
        android:layout_height="30dp"
        android:text="+"/>
</LinearLayout>
CustomView类继承LinearLayout,, 填充customView.xml的布局

public class CustomView extends LinearLayout{

    private Button reverse;
    private Button add;
    private EditText editText;
    private int mCount;
    Context context;
    public CustomView(Context context) {
        super(context);
    }

    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context =context;

        View view = View.inflate(context, R.layout.custom_view,this);

        reverse = (Button) view.findViewById(R.id.reverse);
        add = (Button) view.findViewById(R.id.add);
        editText = (EditText) view.findViewById(R.id.count);

       //点击减号,,数量减1
        reverse.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String content = editText.getText().toString().trim();
                //转成int
                int count = Integer.valueOf(content);
                if(count>1){
                    mCount = count-1;
                    editText.setText(mCount+"");//设置数量

                    //接口回调 把mCount暴露出去,,adapter里面调用
                   if(clickListener!=null){
                       clickListener.click(mCount);
                   }
                }
            }
        });

        //点击加号 数量加1
        add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String content = editText.getText().toString().trim();
                int count = Integer.valueOf(content);

                mCount = count+1;//赋值给mcount
                editText.setText(count+"");

                if(clickListener!=null){
                    clickListener.click(mCount);
                }
            }
        });


    }

    ClickListener clickListener;
    public void setClickListener(ClickListener clickListener){
        this.clickListener = clickListener;
    }
    //设置加减号的监听
    public interface ClickListener{
        public void click(int count);//把当前的数量传过去
    }

    //设置初始的数量值
    public void getCount(int count){
        editText.setText(count+"");//设置初始数量
    }



    public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}
RecyclerAdapter 适配器里面的,, 实现customview里面的接口

public class SecondRecyAdapter extends RecyclerView.Adapter<SecondRecyAdapter.MyViewholder1>{

    Context context;
    List<SecondBean.DataBean.ListBean> listShop;

    public SecondRecyAdapter(Context context, List<SecondBean.DataBean.ListBean> listShop) {
        this.listShop = listShop;
        this.context =  context;
    }


    @Override
    public MyViewholder1 onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context,R.layout.second_recy_adapter,null);
        MyViewholder1 myviewholder1 = new MyViewholder1(view);
        return myviewholder1;
    }

    @Override
    public void onBindViewHolder(final MyViewholder1 holder, final int position) {

        String images = listShop.get(position).getImages();
        String[] split = images.split("\\|");

        //设置商品图片
        ImageLoader.getInstance().displayImage(split[0],holder.ivPic);
        //调用customiew类里面的方法,,设置商品名称
        holder.customView.getCount(listShop.get(position).getNum());
      // holder.tvShopName.setText(listShop.get(position).getSellerid());
        holder.tvName.setText(listShop.get(position).getTitle());
        holder.tvPrice.setText(listShop.get(position).getPrice()+"");
        //给 每个条目的选中按钮 设置状态,根据数据源里面的check
        holder.product_select.setChecked(listShop.get(position).isCheck());
        //主动点击每个条目前面的多选框,点击事件
        holder.product_select.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

               //拿到当前多选框的选中状态,,赋值给数据源里面,,holder.product_select.isChecked()
               listShop.get(position).setCheck(holder.product_select.isChecked());
                notifyDataSetChanged();

                if(checkBoxListener != null){
                    //secondActivity调用方法
                    checkBoxListener.checkBox(listShop);
                }

            }
        });

        //customview中的加减号的点击监听
        holder.customView.setClickListener(new CustomView.ClickListener() {
            @Override
            public void click(int count) {
                //count是当前的数量
                //根据传来的count 改变数据源里的num
                listShop.get(position).setNum(count);
                notifyDataSetChanged();

                //接口回调出去..
                if(customViewListener!=null){
                    //把当前集合传过去
                    customViewListener.customClick(listShop);
                }
            }
        });

        //删除当前条目的点击事件
        holder.ivDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //改变数据源中的 删除当前条目
                listShop.remove(position);
                notifyDataSetChanged();

                //接口回调出去
                if(delItemListener!=null){
                    delItemListener.delItem(listShop);
                }
            }
        });


 }

    @Override
    public int getItemCount() {
        return listShop==null?0:listShop.size();
    }

    public static class MyViewholder1 extends RecyclerView.ViewHolder {

        private final ImageView ivDelete;
        private final TextView tvPrice;
        private final TextView tvName;
        private final ImageView ivSelect;
        CustomView customView;
        private final ImageView ivPic;
        private final CheckBox product_select;//每个条目前面的多选框,
        // private final TextView tvShopName;//商铺名称

        public MyViewholder1(View itemView) {
            super(itemView);
            //找到所有的控件
            ivDelete = (ImageView) itemView.findViewById(R.id.iv_item_shopcart_cloth_delete);
            tvPrice = (TextView) itemView.findViewById(R.id.tv_item_shopcart_cloth_price);
            tvName = (TextView) itemView.findViewById(R.id.tv_item_shopcart_clothname);
           ivSelect = (ImageView) itemView.findViewById(R.id.shopcart_cloth_select);
            ivPic = (ImageView) itemView.findViewById(R.id.iv_item_shopcart_cloth_pic);
            product_select = (CheckBox) itemView.findViewById(R.id.cb_item_shopcart_clothselect);
            customView = (CustomView) itemView.findViewById(R.id.custom_View);
           // tvShopName = (TextView) itemView.findViewById(R.id.tv_item_shopcart_shopname);


        }
    }

    //返回当前集合的方法
    public List<SecondBean.DataBean.ListBean> getList(){
        return listShop;
    }
    //实现多选框的监听
    CheckBoxListener checkBoxListener;
    public void setCheckBoxListener(CheckBoxListener checkBoxListener){
        this.checkBoxListener = checkBoxListener;
    }

    //每个条目前面的多选框点击的监听
    public interface CheckBoxListener{
        public void checkBox(List<SecondBean.DataBean.ListBean> list);
    }

    //实现加减号 改变数量和总价
     public interface CustomViewListener{
        public void customClick(List<SecondBean.DataBean.ListBean> list);
    }
    //实现加减号 的监听
    CustomViewListener customViewListener;
    public void setCustomViewListener(CustomViewListener customViewListener){
        this.customViewListener = customViewListener;
    }

    //实现删除按钮的点击事件
    public interface DelItemListener{
        public void delItem(List<SecondBean.DataBean.ListBean> list);
    }
    DelItemListener delItemListener;
    public void setDelItemListener(DelItemListener delItemListener){
        this.delItemListener = delItemListener;
    }

}

Mainactivity里面的,,求总价 求总数量  实现recyAdapter里面的接口

public class SecondActivity extends AppCompatActivity {

    private TextView all_select;//全选按钮
    private TextView totalPrice;//总价
    private TextView totalNum;//总件数
    private List<SecondBean.DataBean.ListBean> listShop = new ArrayList<>();
    private SecondRecyAdapter secondRecyAdapter;

    boolean mSelect = false;
    private RecyclerView second_recyview;
    private boolean shifoucheck;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        //获取控件

        second_recyview = (RecyclerView) findViewById(R.id.second_recyview);
        all_select = (TextView) findViewById(R.id.quanxuan);//全选按钮
        totalPrice = (TextView) findViewById(R.id.totalprice);
        totalNum = (TextView) findViewById(R.id.totalnum);

       // secondRecyAdapter = new SecondRecyAdapter(SecondActivity.this,listShop);;
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(SecondActivity.this,LinearLayoutManager.VERTICAL,false);
        second_recyview.setLayoutManager(linearLayoutManager);
        //请求网络数据
        getData();
        //请求完网络数据 设置适配器
        if(secondRecyAdapter==null){
            secondRecyAdapter = new SecondRecyAdapter(SecondActivity.this,listShop);
            second_recyview.setAdapter(secondRecyAdapter);
        }else{
            secondRecyAdapter.notifyDataSetChanged();
        }

        //进入页面先给总的全选按钮设置一个标记tag tag为1  不选中, tag为2选中
        all_select.setTag(1);//默认不选中

        //为了通过all_select改变 每条数据的选中状态
        shifoucheck = false;
        //全选按钮的点击事件
        all_select.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //设置图片和字在一个控件里面,,图片的大小不会打乱
                   // Drawable left = getResources().getDrawable(R.drawable.shopcart_selected);
                   // all_select.setCompoundDrawablesWithIntrinsicBounds(left,null,null,null);

                //获取all_select 的tag
                int tag = (int) all_select.getTag();
                if(tag==1){
                    //如果是没选中,点击以后 改变成选中
                    all_select.setTag(2);
                    all_select.setBackgroundResource(R.drawable.shopcart_selected);
                    //控制所有的条目都改成 选中
                    shifoucheck = true;
                }else{
                    //如果当前是选中的 就设置成未选中
                    all_select.setTag(1);
                    all_select.setBackgroundResource(R.drawable.shopcart_unselected);
                    shifoucheck = false;
                }

                //然后遍历集合里面的所有条目都设置成选中
                for (SecondBean.DataBean.ListBean bean : listShop){
                    //给数据源里面的check 标记为 上面改变的
                    bean.setCheck(shifoucheck);
                }
                secondRecyAdapter.notifyDataSetChanged();//刷新适配器
                sum(secondRecyAdapter.getList());//把适配器里面的集合传进去,求和
          }
        });

        //调用适配器里面的选中多选框的监听
        secondRecyAdapter.setCheckBoxListener(new SecondRecyAdapter.CheckBoxListener() {
            @Override
            public void checkBox(List<SecondBean.DataBean.ListBean> list) {
                //调用求和的方法
                sum(list);
            }
        });

        //调用适配器里面的 加减号的监听
        secondRecyAdapter.setCustomViewListener(new SecondRecyAdapter.CustomViewListener() {
            @Override
            public void customClick(List<SecondBean.DataBean.ListBean> list) {
                sum(list);
            }
        });

        //调用适配器里面的 删除当前条目的方法
        secondRecyAdapter.setDelItemListener(new SecondRecyAdapter.DelItemListener() {
            @Override
            public void delItem(List<SecondBean.DataBean.ListBean> list) {
                sum(list);
            }
        });

    }


    //求总价的总数量的方法
    public void sum(List<SecondBean.DataBean.ListBean> listShop){
        float price = 0;
         int count = 0;
        //反着全选的控制,,,控制下面的总的 全选按钮
        boolean allCheck = true;
        for (SecondBean.DataBean.ListBean bean : listShop){
            if(bean.isCheck()){
                //如果当前的check为true.计算总价
                price += bean.getPrice()*bean.getNum();
                count += bean.getNum();
            }else{
                //只要有一个为没选中,就标记,改变下面的全选按钮
                allCheck = false;

            }

            //设置下面的总价和数量
            totalNum.setText("共"+count+"件商品");
            totalPrice.setText("总价: "+price);
        }

        //根据allcheck 改变下面的全选按钮的值
        if(allCheck){
            //如果遍历出来的所有check都是true,就全选也选中
            all_select.setTag(2);
            all_select.setBackgroundResource(R.drawable.shopcart_selected);
        }else{
            all_select.setTag(1);
            all_select.setBackgroundResource(R.drawable.shopcart_unselected);
        }

    }


    //请求网络数据解析
    private void getData() {
        String path = "http://120.27.23.105/product/getCarts?uid=100";
        OkhttpUtils.getInstance().asy(null, path, new AbstractUiCallBack<SecondBean>() {

             @Override
            public void success(SecondBean secondBean) {
               // System.out.println(secondBean.getData().get(0).getList().get(0).getTitle());
               //添加到集合里 data里面的list
                for(int i=0;i<secondBean.getData().size();i++){
                    //将集合里面的list集合添加到大集合里去
                    listShop.addAll(secondBean.getData().get(i).getList());
                }
                // System.out.println(listShop.get(0).getTitle());
                //设置适配器
               /*if(secondRecyAdapter==null){
                    secondRecyAdapter = new SecondRecyAdapter(SecondActivity.this,listShop);
                second_recyview.setAdapter(secondRecyAdapter);
                }else{
                    secondRecyAdapter.notifyDataSetChanged();
                }*/

            }

            @Override
            public void failure(Exception e) {

            }
        });
    }
}
新建类继承application

public class App extends Application{
    @Override
    public void onCreate() {
        super.onCreate();

        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).build();
        ImageLoader.getInstance().init(configuration);
    }
}
清单文件中声明

 <application
        android:name=".aplica.App"
 </application>


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值