RxJava+retrofit+EvenBust简单实现购物车

首先说一下请求到数据的view层页面详细代码

public class MainActivity extends AppCompatActivity implements MainView {

    @BindView(R.id.f_recyclerView)
    RecyclerView fRecyclerView;
    @BindView(R.id.f_checkbox)
    CheckBox fCheckbox;
    @BindView(R.id.qx_tv)
    TextView qxTv;
    @BindView(R.id.f_price)
    TextView fPrice;
    @BindView(R.id.refreshLayout)
    SmartRefreshLayout refreshLayout;
    Unbinder unbinder;
    @BindView(R.id.toShop_btn)
    Button toShopBtn;
    private CartAdapter adapter;
    private List<CartBean.DataBean> data;
    private MainPresenter mainPresenter;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        EventBus.getDefault().register(this);
        mainPresenter = new MainPresenter();

        mainPresenter.attchView(this);

        mainPresenter.getCartDa();
    }

    @Override
    public void Success(List<CartBean.DataBean> showCartsBean) {

        data=showCartsBean;
        fRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
            adapter = new CartAdapter(R.layout.cart_item, showCartsBean);
            fRecyclerView.setAdapter(adapter);

            toShopBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //startActivity(new Intent(getActivity(), OrderActivity.class));
                }
            });

            fCheckbox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (fCheckbox.isChecked()) {
                        for (int i = 0; i < data.size(); i++) {
                            data.get(i).setIschekbox(true);
                            for (int i1 = 0; i1 < data.get(i).getList().size(); i1++) {
                                data.get(i).getList().get(i1).setIscheckbox(true);
                            }
                        }
                    } else {
                        for (int i = 0; i < data.size(); i++) {
                            data.get(i).setIschekbox(false);
                            for (int i1 = 0; i1 < data.get(i).getList().size(); i1++) {
                                data.get(i).getList().get(i1).setIscheckbox(false);
                            }
                        }
                    }
                    /*  */
                    totalPrice();
                    adapter.notifyDataSetChanged();
                }

            });


    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void shub(String mas) {

        adapter.notifyDataSetChanged();
        totalPrice();
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void shub2(String mas1) {

        adapter.notifyDataSetChanged();
        totalPrice();
    }


    @Subscribe(threadMode = ThreadMode.MAIN)
    public void shua(String ma) {
        adapter.notifyDataSetChanged();

        StringBuilder stringBuilder = new StringBuilder();
        if (adapter != null) {
            for (int i = 0; i < adapter.getBean().size(); i++) {

                stringBuilder.append(adapter.getBean().get(i).getIschekbox());

                for (int i1 = 0; i1 < adapter.getBean().get(i).getList().size(); i1++) {

                    stringBuilder.append(adapter.getBean().get(i).getList().get(i1).isIscheckbox());

                }
            }
        }
        if (stringBuilder.toString().contains("false")) {
            fCheckbox.setChecked(false);
        } else {
            fCheckbox.setChecked(true);
        }

        totalPrice();

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mainPresenter.destorView();
        EventBus.getDefault().unregister(this);
    }

    private void totalPrice() {
        double totalprice = 0;
        /*循环嵌套*/
        for (int i = 0; i < adapter.getBean().size(); i++) {
            for (int i1 = 0; i1 < adapter.getBean().get(i).getList().size(); i1++) {
                if (adapter.getBean().get(i).getList().get(i1).isIscheckbox()) {
                    CartBean.DataBean.ListBean listBean = adapter.getBean().get(i).getList().get(i1);
                    totalprice += listBean.getTotalNum() * listBean.getBargainPrice();
                }
            }
        }
        fPrice.setText("合计:¥" + totalprice);
    }
}

写完主要代码后,再来写大adapter页面

public class CartAdapter extends BaseQuickAdapter<CartBean.DataBean,BaseViewHolder> {

    private Context mcontext;
    private List<CartBean.DataBean> bean;
    private int a= -1;

    public List<CartBean.DataBean> getBean() {
        return bean;
    }

    public CartAdapter(int layoutResId, @Nullable List<CartBean.DataBean> data) {
        super(layoutResId, data);
        EventBus.getDefault().register(this);
        bean= data;
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void shua(String ma) {
        notifyDataSetChanged();
    }

    @Override
    protected void convert(BaseViewHolder helper, CartBean.DataBean item) {

        final int positions = helper.getLayoutPosition();
        final CartBean.DataBean list = this.bean.get(positions);
        /* */
        helper.setChecked(R.id.z_box, list.getIschekbox());
        helper.setText(R.id.z_text, list.getSellerName());
        /* */
        RecyclerView z_recyclerview = helper.getView(R.id.z_recyclerview);
        final CheckBox z_box = helper.getView(R.id.z_box);
        /* 适配器 */
        z_recyclerview.setLayoutManager(new LinearLayoutManager(mcontext));
        final CartItemAdapter cartItemAdapter = new CartItemAdapter(R.layout.cart_item_layout, list.getList());
        z_recyclerview.setAdapter(cartItemAdapter);


        /* 判断 商家的checkbox 应不应该选中*/
        for (int i = 0; i < list.getList().size(); i++) {

            if (!list.getList().get(i).isIscheckbox()) {
                helper.setChecked(R.id.z_box, false);
                break;
            } else {
                helper.setChecked(R.id.z_box, true);
            }
        }

        /*
         * 商家点击全选 反选
         * */
        z_box.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (z_box.isChecked()) {

                    list.setIschekbox(true);

                    for (int i = 0; i < list.getList().size(); i++) {
                        list.getList().get(i).setIscheckbox(true);
                    }
                } else {
                    list.setIschekbox(false);
                    for (int i = 0; i < list.getList().size(); i++) {
                        list.getList().get(i).setIscheckbox(false);
                    }

                }
                // notifyDataSetChanged();
                notifyItemChanged(positions);
                String mas ="";
                EventBus.getDefault().post(mas);
            }
        });


        //点击加减
        cartItemAdapter.setOnItemChildClickListener(new OnItemChildClickListener() {
            @Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                /*每次点击都赋值 确保数据准确*/
                int num = list.getList().get(position).getNum();
                switch (view.getId()) {
                    case R.id.zu_btn_del:
                        if (num == 1) {
                            return;
                        } else {
                            num--;
                            list.getList().get(position).setTotalNum(num);
                            /*我们页面展示的num*/
                            list.getList().get(position).setNum(num);
                        }


                        notifyItemChanged(positions);
                        //      notifydata();
                        String mas ="";
                        EventBus.getDefault().post(mas);
                        break;

                    case R.id.zu_btn_add:
                        num++;
                        list.getList().get(position).setTotalNum(num);
                        list.getList().get(position).setNum(num);
                        //    notifydata();

                        notifyItemChanged(positions);
                        String mas1 ="";
                        EventBus.getDefault().post(mas1);
                        break;

                }
            }
        });

    }

}

布局

<?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:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" android:orientation="horizontal">

        <LinearLayout

            android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:orientation="horizontal">
            <CheckBox
                android:id="@+id/up_cb"
                android:layout_gravity="center"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <ImageView
                android:src="@mipmap/ic_launcher"
                android:id="@+id/show2_ima"
                android:layout_width="80dp"
                android:layout_height="80dp"/>
        </LinearLayout>

        <LinearLayout
            android:layout_marginLeft="10dp"
            android:layout_width="match_parent"
            android:layout_gravity="center"
            android:layout_height="wrap_content" android:orientation="vertical">

            <TextView
                android:id="@+id/show2_text"
                android:text="商品标题"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
            <RelativeLayout
                android:layout_marginTop="15dp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <TextView
                    android:id="@+id/show_price"
                    android:layout_alignParentLeft="true"
                    android:text="优惠价:¥99.99"
                    android:textColor="@android:color/holo_red_light"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>

                <include
                    layout="@layout/btnzu"
                    android:layout_alignParentRight="true"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
            </RelativeLayout>
        </LinearLayout>

    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="#999999"/>



</LinearLayout>

子页面

public class CartItemAdapter extends BaseQuickAdapter<CartBean.DataBean.ListBean,BaseViewHolder> {

    private   List<CartBean.DataBean.ListBean> bean;

    public CartItemAdapter(int layoutResId, @Nullable List<CartBean.DataBean.ListBean> data) {
        super(layoutResId, data);
        bean= data;
    }

    @Override
    protected void convert(BaseViewHolder helper, CartBean.DataBean.ListBean item) {

        item.setTotalNum(item.getNum());

        /* 获取新的实体类 防止刷新 回到以前*/
        int position = helper.getLayoutPosition();
        final CartBean.DataBean.ListBean listBean = bean.get(position);

        //赋值
        helper.setText(R.id.show_price,"优惠价:¥"+item.getBargainPrice());
        helper.setText(R.id.zu_ed,item.getNum()+"");
        helper.setText(R.id.show2_text,listBean.getTitle());
        helper.setChecked(R.id.up_cb,listBean.isIscheckbox());
        String[] split = item.getImages().split("\\|");
        Glide.with(mContext).load(split[0]).crossFade().into((ImageView) helper.getView(R.id.show2_ima));
        /*获取控件*/
        final CheckBox up_cb = helper.getView(R.id.up_cb);
        /* include引用  点击事件*/
        helper.setText(R.id.zu_btn_del,"-").addOnClickListener(R.id.zu_btn_del);
        helper.setText(R.id.zu_btn_add,"+").addOnClickListener(R.id.zu_btn_add);

        up_cb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (up_cb.isChecked()){
                    listBean.setIscheckbox(true);
                }else {
                    listBean.setIscheckbox(false);
                }

                //局部刷新
                notifyDataSetChanged();
                /*通知父类刷新*/
               /* if (cartCheckListener!=null){
                    cartCheckListener.notifyParent();}*/
                String ma  ="";
                EventBus.getDefault().post(ma);

            }
        });


    }

}

布局

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

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <CheckBox
            android:id="@+id/z_box"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            />

        <TextView
            android:layout_marginTop="10dp"
            android:layout_marginLeft="30dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/z_text"
            android:text="asdfas"
            />
    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/z_recyclerview"
        >
    </android.support.v7.widget.RecyclerView>

</LinearLayout>

背景

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <size android:width="20dp" android:height="10dp"/>
    <solid android:color="#f00"/>
    <corners android:radius="19dp"/>

</shape>

btnzu

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:orientation="horizontal"
    >

    <Button
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:id="@+id/zu_btn_del"
        android:background="#00000000"
        android:text="-"
        android:layout_gravity="center_vertical"
        />

    <EditText
        android:layout_gravity="center_vertical"
        android:gravity="center"
        android:id="@+id/zu_ed"
        android:layout_width="30dp"
        android:layout_height="20dp"
        android:background="#A8A8A8" />


    <Button
        android:layout_gravity="center_vertical"
        android:id="@+id/zu_btn_add"
        android:layout_width="40dp"
        android:background="#00000000"
        android:layout_height="40dp"
        android:text="+" />

</LinearLayout>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值