Android使用RecyclerView完成简单购物车

购物车

这里博主使用的是MVP+万能适配器

话不多说,直接代码

实体类

private int ret;
    private List<DataBean> data;

    public int getRet() {
        return ret;
    }

    public void setRet(int ret) {
        this.ret = ret;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
		//这个用来计算选中的数量
        private int selectNum = 0;
        //判断是否选中
        private boolean isClick;

        public int getSelectNum() {
            return selectNum;
        }

        public void setSelectNum(int selectNum) {
            this.selectNum = selectNum;
        }

        public boolean isClick() {
            return isClick;
        }

        public void setClick(boolean click) {
            isClick = click;
        }

        private String id;
        private String title;
        private String pic;
        private String collect_num;
        private String food_str;
        private int num;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getPic() {
            return pic;
        }

        public void setPic(String pic) {
            this.pic = pic;
        }

        public String getCollect_num() {
            return collect_num;
        }

        public void setCollect_num(String collect_num) {
            this.collect_num = collect_num;
        }

        public String getFood_str() {
            return food_str;
        }

        public void setFood_str(String food_str) {
            this.food_str = food_str;
        }

        public int getNum() {
            return num;
        }

        public void setNum(int num) {
            this.num = num;
        }

        @Override
        public String toString() {
            return "DataBean{" +
                    "id='" + id + '\'' +
                    ", title='" + title + '\'' +
                    ", pic='" + pic + '\'' +
                    ", collect_num='" + collect_num + '\'' +
                    ", food_str='" + food_str + '\'' +
                    ", num=" + num +
                    '}';
        }
    }

    @Override
    public String toString() {
        return "FoodEntity{" +
                "ret=" + ret +
                ", data=" + data +
                '}';
    }

万能适配器

public class ShopCarAdapter extends BaseQuickAdapter<FoodEntity.DataBean, BaseViewHolder> {

    public ShopCarAdapter(int layoutResId, @Nullable List<FoodEntity.DataBean> data) {
        super(layoutResId, data);
    }

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

        //设置数据
        helper.setText(R.id.item_car_title,item.getTitle()+"");
        helper.setText(R.id.item_car_price,item.getNum()+"");
        helper.setText(R.id.item_car_num,item.getSelectNum()+"");
        GlideUtils.getInstance().CommonGlide(mContext,item.getPic(),helper.getView(R.id.item_car_iv));

        //添加点击事件
        helper.addOnClickListener(R.id.item_car_btn_add);
        helper.addOnClickListener(R.id.item_car_btn_delete);
        helper.addOnClickListener(R.id.item_car_btn_subtract);
        helper.addOnClickListener(R.id.item_car_cb_check);

        //设置是否选中
        boolean isClick = item.isClick();
        CheckBox checkBox = helper.getView(R.id.item_car_cb_check);
        if(isClick) {
            checkBox.setChecked(true);
        } else {
            checkBox.setChecked(false);
        }

    }
}

子布局文件

<CheckBox
        android:layout_marginLeft="5dp"
        android:id="@+id/item_car_cb_check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></CheckBox>
    <ImageView
        android:layout_marginLeft="10dp"
        android:src="@drawable/ic_launcher_background"
        android:id="@+id/item_car_iv"
        android:layout_width="60dp"
        android:layout_height="60dp"></ImageView>
    <LinearLayout
        android:layout_marginLeft="10dp"
        android:orientation="vertical"
        android:layout_weight="4"
        android:layout_width="0dp"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/item_car_title"
            android:text="hahah"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </TextView>
        <LinearLayout
            android:gravity="center_vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <ImageView
                android:id="@+id/item_car_btn_subtract"
                android:src="@drawable/subtract"
                android:layout_width="25dp"
                android:layout_height="25dp">
            </ImageView>
            <TextView
                android:id="@+id/item_car_num"
                android:text="0"
                android:textSize="18dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
            </TextView>
            <ImageView
                android:id="@+id/item_car_btn_add"
                android:src="@drawable/add"
                android:layout_width="25dp"
                android:layout_height="25dp">

            </ImageView>
        </LinearLayout>

    </LinearLayout>
    <LinearLayout
        android:layout_marginLeft="10dp"
        android:orientation="vertical"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/item_car_price"
            android:text="hahah"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </TextView>
        <ImageView
            android:id="@+id/item_car_btn_delete"
            android:src="@drawable/del"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"></ImageView>
    </LinearLayout>

这是主页面

public class FavoriteFragment extends BaseFragment<FoodPresenter> implements FoodContract.View {

    @BindView(R.id.fra_favoriter_rv)
    RecyclerView fraFavoriterRv;
    @BindView(R.id.fra_favoriter_checkAll)
    CheckBox fraFavoriterCheckAll;
    @BindView(R.id.fra_favoriter_btn_clear)
    Button fraFavoriterBtnClear;
    @BindView(R.id.fra_favoriter_tv_allMoney)
    TextView fraFavoriterTvAllMoney;

    private ShopCarAdapter shopCarAdapter;
    private List<FoodEntity.DataBean> list_food = new ArrayList<>();

    //用来计算总价
    private float allMoney = 0.0f;

    @Override
    public int bindLayout() {
        return R.layout.fragment_favoriter;
    }

    @Override
    public void initView() {
        EventBus.getDefault().register(this);
        //设置布局样式
        fraFavoriterRv.setLayoutManager(new LinearLayoutManager(getActivity()));
        //添加分割线
        fraFavoriterRv.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL));
        //设置删除动画
        DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator();
        defaultItemAnimator.setRemoveDuration(1000);
        fraFavoriterRv.setItemAnimator(defaultItemAnimator);

        //设置侧滑删除和上下交换
        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {
            //允许拖动的方向
            @Override
            public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
                return makeMovementFlags(ItemTouchHelper.UP|ItemTouchHelper.DOWN,ItemTouchHelper.RIGHT);
            }

            //上下拖动
            @Override
            public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
                int adapterPosition = viewHolder.getAdapterPosition();
                int adapterPosition1 = target.getAdapterPosition();
                //利用提供的排序进行交换
                Collections.swap(list_food,adapterPosition,adapterPosition1);
                //刷新适配器,注意要刷新指定交换位置
                shopCarAdapter.notifyItemMoved(adapterPosition,adapterPosition1);
                return true;
            }

            //侧滑删除
            @Override
            public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
                int adapterPosition = viewHolder.getAdapterPosition();
                list_food.remove(adapterPosition);
                //刷新适配器,只刷新删除位置
                shopCarAdapter.notifyItemRemoved(adapterPosition);
            }
        });
        //绑定对应recyclerView
        itemTouchHelper.attachToRecyclerView(fraFavoriterRv);

    }

    @Override
    public void initInject() {
        DaggerFoodCompontent.builder().foodModules(new FoodModules(this, new FoodModel())).build().injectMainActivity(this);
    }

    @Override
    public void initData() {
        if (mPresenter != null) {
            mPresenter.selectData(1, 20, 1);
        } else {
            LogUtils.log_i("mPresenter" + mPresenter);
        }
    }

    @Override
    public void initAdapter(List<FoodEntity.DataBean> dataBeans) {

        //定义一个全局的集合,用于下面的计算
        list_food.addAll(dataBeans);

        //初始化适配器
        if (shopCarAdapter == null) {
            shopCarAdapter = new ShopCarAdapter(R.layout.item_car_layout, list_food);
            fraFavoriterRv.setAdapter(shopCarAdapter);
            initShopCar();
        }

    }

    private void initShopCar() {

        shopCarAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
            @Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                int id = view.getId();
                switch (id) {
                    case R.id.item_car_btn_add:
                        int selectNum = list_food.get(position).getSelectNum();
                        selectNum++;
                        LogUtils.log_i(selectNum+"");
                        list_food.get(position).setSelectNum(selectNum);
                        shopCarAdapter.notifyDataSetChanged();
                        break;
                    case R.id.item_car_btn_subtract:
                        int num = list_food.get(position).getSelectNum();
                        if(num > 0) {
                            num--;
                            list_food.get(position).setSelectNum(num);
                            shopCarAdapter.notifyDataSetChanged();
                        }
                        break;
                    case R.id.item_car_btn_delete:
                        list_food.remove(position);
                        shopCarAdapter.notifyItemRemoved(position);
                        break;
                    case R.id.item_car_cb_check:
                        boolean click = list_food.get(position).isClick();
                        list_food.get(position).setClick(!click);
                        break;
                }
                computeMoney();
            }
        });
    }

    //计算价格
    private void computeMoney() {
        //防止重复累加
        allMoney = 0.0f;
        //利用循环遍历,判断是否有选中的,然后计算价格,进行累加
        for (FoodEntity.DataBean dataBean : list_food) {
            boolean click = dataBean.isClick();
            if(click) {
                //用这个类型来代替价格
                float price = dataBean.getNum();
                int selectNum = dataBean.getSelectNum();
                float singlePrice = price * selectNum;
                //累加总价
                allMoney+=singlePrice;
            }
        }

        fraFavoriterTvAllMoney.setText(allMoney+"");

    }

    @OnClick({R.id.fra_favoriter_checkAll, R.id.fra_favoriter_btn_clear})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.fra_favoriter_checkAll:
                //全选
                for (FoodEntity.DataBean dataBean : list_food) {
                    dataBean.setClick(!dataBean.isClick());
                }
                computeMoney();
                shopCarAdapter.notifyDataSetChanged();
                break;
            case R.id.fra_favoriter_btn_clear:

                break;
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android RecyclerView购物是一种常见的应用场景,可以通过RecyclerView实现购物列表的展示和管理。在购物中,可以添加、删除、修改商品数量等操作,同时还可以计算商品总价和结算等功能。使用RecyclerView可以方便地实现购物列表的动态更新和优化,提高应用的性能和用户体验。 ### 回答2: Android Recyclerview购物是一个很实用的功能,它具有展示商品列表、添加商品至购物、结算等功能。RecyclerviewAndroid官方推出的新一代列表控件,拥有高效的回收重复利用View的能力,能够更好地优化程序性能。 在购物功能中,我们可以通过Recyclerview来展示商品列表,每个商品可以使用一个Recyclerview的item来表示。在Recyclerview的item中可以包含商品的名称、价格、图片等信息,通过合适的布局设计,可以使商品列表看起来更加美观和易于使用。 而对于添加商品至购物的功能,可以通过Recyclerview的item中添加一个按钮或者其他交互元素,当用户点击按钮时,就可以将商品添加至购物中。这里需要注意的是,添加至购物中的商品信息可以通过本地数据库或者网络存储来存储,保证购物中的商品信息是持久化的。 最后,当用户需要结算时,我们可以通过Recyclerview中的item来展示购物中的商品信息,并计算出商品总价格。用户可以在购物中选择需要购买的商品,然后点击结算按钮,进入到支付页面来完成购买。 总之,Recyclerview购物是一项实用的功能,它包含商品列表展示、添加商品至购物和结算等功能,可以通过合理的布局和交互设计来优化用户体验,同时通过本地或者网络存储来保证购物中的商品信息是持久化的。 ### 回答3: 随着移动互联网和智能手机的普及,移动购物已经成为了一种普遍的购物方式。而对于一个电商应用来说,购物是不可或缺的功能之一。Android Recyclerview是一种非常适合实现购物功能的控件。下面我们来了解一下如何使用Recyclerview实现购物功能。 1.设计数据模型 购物主要是一个列表,需要设计对应的数据模型。一般的购物数据模型包含商品ID、商品名称、数量、单价、图片等属性。我们需要在开发中定义一个CartItem类来表示一个购物项。 2.实现Recyclerview购物的界面中,我们需要使用RecyclerView控件来展示购物中所有的商品项。我们需要在xml文件中定义RecyclerView控件以及对应的适配器。 3.定义适配器 适配器是连接Recyclerview和数据模型之间的桥梁。我们需要在适配器中定义好ViewHolder,以便对每个列表项进行数据绑定。还需要定义几个方法,如获取Item的数量、获取指定位置上的Item内容以及创建ViewHolder对象等。 4.实现交互功能 购物功能一般包括增加、删除、修改数量等操作。我们需要在适配器中实现这些操作,并且实时更新数据模型和Recyclerview控件。 5.实现结算功能 购物中一般都有结算按钮,用户可以在结算之前对商品进行修改或删除。我们需要在结算功能中实现对购物总价的计算,并且将商品信息传递给支付页面。 总之,使用Recyclerview实现购物功能可以帮助我们在Android应用中非常快速地完成相关功能,而且具有良好的扩展性。同时我们还可以结合其他的功能进行使用,如异步加载图片、分页加载等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值