购物车页面及代码

本文档展示了购物车页面的布局代码,包括父类和子类适配器的XML和Java实现。适配器中包含了CheckBox的选择逻辑、RecyclerView的使用,以及事件监听功能。通过点击事件处理商品的选中状态,并与服务器进行交互更新购物车数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

子类适配器代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="horizontal"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent" android:layout_height="wrap_content">

    <CheckBox
        android:id="@+id/check_car_child"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:orientation="vertical"
        >
        <com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/image_car_child"
            android:layout_width="150pt"
            android:layout_height="150pt"
            android:layout_alignParentTop="true"
            android:layout_toEndOf="@+id/check_car_child"
            app:srcCompat="@drawable/abu" />
    </LinearLayout>

    <RelativeLayout
        android:layout_width="0dp"
        android:layout_weight="6"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/text_child"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:text="TextView" />

        <TextView
            android:id="@+id/text_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginTop="100dp"
            android:text="TextView" />

        <com.example.lenovo.moniyuekao.ui.AddSubView
            android:id="@+id/addsub"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginTop="136dp"></com.example.lenovo.moniyuekao.ui.AddSubView>
    </RelativeLayout>
</LinearLayout>
父类适配器代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="wrap_content">

 <LinearLayout
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:orientation="horizontal">
     <CheckBox
         android:id="@+id/check_car_child"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"

         />

     <TextView
         android:id="@+id/text_car_shop"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="TextView" />
 </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recy_car_present"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true" />
</LinearLayout>

java适配器代码
package com.example.lenovo.moniyuekao.adapter;

import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v7.widget.DividerItemDecoration;
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.example.lenovo.moniyuekao.R;
import com.example.lenovo.moniyuekao.bean.BeanCar;
import com.example.lenovo.moniyuekao.bean.ShopEvent;
import com.example.lenovo.moniyuekao.ui.AddSubView;
import com.facebook.drawee.view.SimpleDraweeView;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

import java.util.List;


/**
 * date:2018/6/29 10:38

 * function:
 */
public class FragmentAdapterCar extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context context;
    private List<BeanCar.DataBean> data;


    public FragmentAdapterCar(Context context, List<BeanCar.DataBean> data) {
        this.context = context;
        this.data = data;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.carpresent, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
        final ViewHolder viewHolder = (ViewHolder) holder;
        viewHolder.mTextCarShop.setText(data.get(position).getSellerName());
        ChildAdapterCar childAdapterCar = new ChildAdapterCar(context, data.get(position).getList());
        viewHolder.mRecyCarPresent.addItemDecoration(new DividerItemDecoration(context,DividerItemDecoration.VERTICAL));
        viewHolder.mRecyCarPresent.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,false));
        viewHolder.mRecyCarPresent.setAdapter(childAdapterCar);
        //商家选择子类
        viewHolder.mCheckCarChild.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean checked = viewHolder.mCheckCarChild.isChecked();

                if (mOnClickShopItem!=null){
                    mOnClickShopItem.OnShopclick(position,checked);
                }
                EventBus.getDefault().post(new ShopEvent(checked, position,data));
            }
        });

        /**
         *复选框的状态值
         */
        List<BeanCar.DataBean.ListBean> list = data.get(position).getList();
        int si=0;
        for (int i = 0; i < list.size(); i++) {
            si+=list.get(i).getSelected();
        }
        if (si==list.size()){
            viewHolder.mCheckCarChild.setChecked(true);
        }else {
            viewHolder.mCheckCarChild.setChecked(false);
        }

    }


    @Override
    public int getItemCount() {
        return data.size();
    }


    static class ViewHolder extends RecyclerView.ViewHolder {
        private CheckBox mCheckCarChild;
        private TextView mTextCarShop;
        private RecyclerView mRecyCarPresent;

        public ViewHolder(View itemView) {
            super(itemView);
            mCheckCarChild = itemView.findViewById(R.id.check_car_child);
            mTextCarShop = itemView.findViewById(R.id.text_car_shop);
            mRecyCarPresent = itemView.findViewById(R.id.recy_car_present);
        }
    }

    /**
     * 内部类
     */
    class ChildAdapterCar extends RecyclerView.Adapter<ChildAdapterCar.ViewHolder> {

        private Context context;
        private List<BeanCar.DataBean.ListBean> list;


        public ChildAdapterCar(Context context, List<BeanCar.DataBean.ListBean> list) {
            this.context = context;
            this.list = list;
            if (!EventBus.getDefault().isRegistered(this)){
                EventBus.getDefault().register(this);
            }
        }

        @NonNull
        @Override
        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(context).inflate(R.layout.carchild, parent, false);
            return new ViewHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
            final ViewHolder holder1 = (ViewHolder) holder;
            String[] split = list.get(position).getImages().split("\\|");
            holder1.mImageCarChild.setImageURI(Uri.parse(split[0]));
            int selected = list.get(position).getSelected();
            if (selected==1){
                holder1.mCheckCarChild.setChecked(true);
            }else {
                holder1.mCheckCarChild.setChecked(false);
            }
            holder1.mTextChild.setText(list.get(position).getTitle());
            holder1.mTextPrice.setText("¥"+list.get(position).getPrice());
            holder1.addsub.setTextnum(list.get(position).getNum());
/**
 * 复选框
 */
            holder1.mCheckCarChild.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean checked = holder1.mCheckCarChild.isChecked();

                if (mOnClickCheckItem!=null){
                    mOnClickCheckItem.onClickCheck(checked,position,list);
                }
                }
            });
/**
 * 加减其
 */
holder1.addsub.setmOnAddItemClick(new AddSubView.OnAddItemClick() {
    @Override
    public void OnAddClick() {
        holder1.mCheckCarChild.setChecked(true);
        int textnum = holder1.addsub.getTextnum();
        if (mOnClickAddSub!=null){
            mOnClickAddSub.onClickAdd(textnum,list,position);
        }
    }
});

        }

        @Override
        public int getItemCount() {
            return list.size();
        }

@Subscribe(threadMode = ThreadMode.MAIN)
public void getShopCheck(ShopEvent shopEvent){
    int position = shopEvent.getPosition();
    List<BeanCar.DataBean.ListBean> list = shopEvent.getData().get(position).getList();
//商家选择子类
    //修改网络的数据
    
    if (shopEvent.getCheck()){
                for (int i = 0; i <list.size() ; i++) {
                    list.get(i).setSelected(1);
                }
            }else {
        for (int i = 0; i <list.size() ; i++) {
            list.get(i).setSelected(0);
        }
    }
    this.notifyDataSetChanged();
}


        public class ViewHolder extends RecyclerView.ViewHolder {
            private CheckBox mCheckCarChild;
            private SimpleDraweeView mImageCarChild;
            private TextView mTextChild;
            private TextView mTextPrice;
            private AddSubView addsub;

            public ViewHolder(View itemView) {
                super(itemView);
                mCheckCarChild = itemView.findViewById(R.id.check_car_child);
                mImageCarChild = itemView.findViewById(R.id.image_car_child);
                mTextChild = itemView.findViewById(R.id.text_child);
                mTextPrice = itemView.findViewById(R.id.text_price);
                addsub= itemView.findViewById(R.id.addsub);

            }
        }
    }
    //j点击商品事件商品
    public interface OnClickShopItem{
        void OnShopclick(int position, boolean checked);
    }

    private OnClickShopItem mOnClickShopItem;

    public void setmOnClickLeftItem(OnClickShopItem onClickShopItem) {
        this.mOnClickShopItem = onClickShopItem;
    }

    //点击子类的商品

    public interface OnClickCheckItem{
        void onClickCheck(boolean checked, int position, List<BeanCar.DataBean.ListBean> list);
    }

    private OnClickCheckItem mOnClickCheckItem;

    public void setmOnClickCheckItem(OnClickCheckItem mOnClickCheckItem) {
        this.mOnClickCheckItem = mOnClickCheckItem;
    }
    //加减其
    public interface OnClickAddSub{
        void onClickAdd(int i, List<BeanCar.DataBean.ListBean> list, int textnum);
    }

    private OnClickAddSub mOnClickAddSub;

    public void setmOnClickAddSub(OnClickAddSub mOnClickAddSub) {
        this.mOnClickAddSub = mOnClickAddSub;
    }
}
逻辑代码
package com.example.lenovo.moniyuekao.fragment;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.DividerItemDecoration;
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 android.widget.Toast;

import com.example.lenovo.moniyuekao.R;
import com.example.lenovo.moniyuekao.adapter.FragmentAdapterCar;
import com.example.lenovo.moniyuekao.bean.BeanCar;
import com.example.lenovo.moniyuekao.bean.BeanCarUpData;
import com.example.lenovo.moniyuekao.utils.MySession;
import com.example.lenovo.moniyuekao.utils.NetUtils;

import java.util.List;

import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;

/**
 * date:2018/6/29 10:06

 * function:
 */
public class FragmentCar extends Fragment {
    private RecyclerView mRecyCar;
    private CheckBox mCarCheck;
    private TextView mTextCar;
    private TextView mJiesuan;
    private MySession api;
    double sum;
    private Observable<BeanCar> dataCar;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_car, container, false);
        initView(view);

        //数据
        MySession mySession = NetUtils.getNetUtils("https://www.zhaoapi.cn/").mySessionApi();
        dataCar = mySession.getDataCar("15768");
//修改数据库
        api = NetUtils.getNetUtils("https://www.zhaoapi.cn/").mySessionApi();

        //查询数据库 赋值
        selectCar(dataCar);
        selectSun(dataCar);
       // checkAll(dataCar);
        return view;
    }

    //全选
    private void checkAll(Observable<BeanCar> dataCar) {
        dataCar.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<BeanCar>() {
                    @Override
                    public void call(BeanCar beanCar) {
                        List<BeanCar.DataBean> beanCarData = beanCar.getData();
                        if (mCarCheck.isChecked()){
                            for (int i = 0; i < beanCarData.size(); i++) {
                                for (int j = 0; j < beanCarData.get(i).getList().size(); j++) {

                                    Observable<BeanCarUpData> upCar = api.getUpCar("15768",  beanCarData.get(i).getList().get(j).getSellerid() + "", beanCarData.get(i).getList().get(j).getPid() + "", "1", beanCarData.get(i).getList().get(j).getNum() + "");
                                    upCar.subscribeOn(Schedulers.io())
                                            .observeOn(AndroidSchedulers.mainThread())
                                            .subscribe(new Action1<BeanCarUpData>() {
                                                @Override
                                                public void call(BeanCarUpData beanCarUpData) {

                                                }
                                            });

                                }
                            }
                        }else {
                            for (int i = 0; i < beanCarData.size(); i++) {
                                for (int j = 0; j < beanCarData.get(i).getList().size(); j++) {

                                    Observable<BeanCarUpData> upCar = api.getUpCar("15768",  beanCarData.get(i).getList().get(j).getSellerid() + "", beanCarData.get(i).getList().get(j).getPid() + "", "0", beanCarData.get(i).getList().get(j).getNum() + "");
                                    upCar.subscribeOn(Schedulers.io())
                                            .observeOn(AndroidSchedulers.mainThread())
                                            .subscribe(new Action1<BeanCarUpData>() {
                                                @Override
                                                public void call(BeanCarUpData beanCarUpData) {

                                                }
                                            });

                                }
                            }
                        }
                    }
                });
    }

    //Rxjava 总价
    private void selectSun(final Observable<BeanCar> dataCar){
       mTextCar.setText(0+"");
       sum=0;
        dataCar.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<BeanCar>() {
                    @Override
                    public void call(BeanCar beanCar) {
                        List<BeanCar.DataBean> beanCarData = beanCar.getData();
                        for (int i = 0; i < beanCarData.size(); i++) {
                            for (int j = 0; j < beanCarData.get(i).getList().size(); j++) {
                                if (beanCarData.get(i).getList().get(j).getSelected()==1){
                                    double v = beanCarData.get(i).getList().get(j).getNum() * beanCarData.get(i).getList().get(j).getPrice();
                                    sum+=v;
                                    mTextCar.setText(sum+"");
                                }
                            }
                        }

                    }
                });
    }




    private void selectCar(final Observable<BeanCar> dataCar) {
        dataCar.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<BeanCar>() {
                    @Override
                    public void call(BeanCar beanCar) {
                        final List<BeanCar.DataBean> data = beanCar.getData();
                        FragmentAdapterCar fragmentAdapterCar = new FragmentAdapterCar(getActivity(),data);
                        mRecyCar.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL));
                        mRecyCar.setLayoutManager(new LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false));
                        mRecyCar.setAdapter(fragmentAdapterCar);
//https://www.zhaoapi.cn/product/updateCarts?uid=71&sellerid=1&pid=1&selected=0&num=10
                        /**
                         * 点击商品
                         */

                        fragmentAdapterCar.setmOnClickLeftItem(new FragmentAdapterCar.OnClickShopItem() {
                            @Override
                            public void OnShopclick(int position, boolean checked) {
                               // Toast.makeText(getActivity(), "++", Toast.LENGTH_SHORT).show();
                                BeanCar.DataBean dataBean = data.get(position);
                                /**
                                 * 修改
                                 */
                                List<BeanCar.DataBean.ListBean> list = dataBean.getList();
                               if (checked){
                                   for (int i = 0; i <list.size(); i++) {
                                       Observable<BeanCarUpData> upCar = api.getUpCar("15768", list.get(i).getSellerid() + "", list.get(i).getPid() + "", "1", list.get(i).getNum() + "");
                                       upCar.subscribeOn(Schedulers.io())
                                               .observeOn(AndroidSchedulers.mainThread())
                                               .subscribe(new Action1<BeanCarUpData>() {
                                                   @Override
                                                   public void call(BeanCarUpData beanCarUpData) {
                                                       Toast.makeText(getActivity(), beanCarUpData.getMsg(), Toast.LENGTH_SHORT).show();

                                                   }
                                               });
                                   }
                               }else {
                                   for (int i = 0; i <list.size(); i++) {
                                       Observable<BeanCarUpData> upCar = api.getUpCar("15768",list.get(i).getSellerid()+"",list.get(i).getPid()+"","0",list.get(i).getNum()+"");
                                       upCar.subscribeOn(Schedulers.io())
                                               .observeOn(AndroidSchedulers.mainThread())
                                               .subscribe(new Action1<BeanCarUpData>() {
                                                   @Override
                                                   public void call(BeanCarUpData beanCarUpData) {
                                                       Toast.makeText(getActivity(), beanCarUpData.getMsg(), Toast.LENGTH_SHORT).show();
                                                   }
                                               });
                                  }
                               }
                                selectSun(dataCar);

                            }
                        });


                        /*
                        子的选选择
                         */
                    fragmentAdapterCar.setmOnClickCheckItem(new FragmentAdapterCar.OnClickCheckItem() {
                        @Override
                        public void onClickCheck(boolean checked, int position, List<BeanCar.DataBean.ListBean> list) {
                            int select=0;
                            if (checked){
                               select=1;
                            }else {
                                select=0;
                            }
                            Observable<BeanCarUpData> upCar = api.getUpCar("15768",list.get(position).getSellerid()+"",list.get(position).getPid()+"",select+"",list.get(position).getNum()+"");
                            upCar.subscribeOn(Schedulers.io())
                                    .observeOn(AndroidSchedulers.mainThread())
                                    .subscribe(new Action1<BeanCarUpData>() {
                                        @Override
                                        public void call(BeanCarUpData beanCarUpData) {
                                            selectCar(dataCar);
                                            Toast.makeText(getActivity(), beanCarUpData.getMsg(), Toast.LENGTH_SHORT).show();
                                        }
                                    });
                            selectSun(dataCar);

                        }
                    });

                        /**
                         * 加减其
                         */
                        fragmentAdapterCar.setmOnClickAddSub(new FragmentAdapterCar.OnClickAddSub() {
                            @Override
                            public void onClickAdd(int textnum, List<BeanCar.DataBean.ListBean> list, int i) {
                                Observable<BeanCarUpData> upCar = api.getUpCar("15768",list.get(i).getSellerid()+"",list.get(i).getPid()+"",1+"",textnum+"");
                                upCar.subscribeOn(Schedulers.io())
                                        .observeOn(AndroidSchedulers.mainThread())
                                        .subscribe(new Action1<BeanCarUpData>() {
                                            @Override
                                            public void call(BeanCarUpData beanCarUpData) {
                                                selectCar(dataCar);
                                                Toast.makeText(getActivity(), beanCarUpData.getMsg(), Toast.LENGTH_SHORT).show();
                                            }
                                        });
                                selectSun(dataCar);

                            }
                        });



                    }
                });
    }



    private void initView(View view) {
        mRecyCar = view.findViewById(R.id.recy_car);
        mCarCheck = view.findViewById(R.id.car_check);
        mTextCar = view.findViewById(R.id.text_car);
        mJiesuan = view.findViewById(R.id.jiesuan);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值