关闭

仿淘宝购物车逻辑

标签: 淘宝购物车逻辑
589人阅读 评论(0) 收藏 举报
分类:

仿淘宝购物车全选反选逻辑

首先说明一下淘宝的购物车的逻辑,购物车里面有第一层店铺,第二层就是店铺下的商品,全选商品,那么店铺上的按钮就会被选中

白色的代表为店铺 红色的代表为商品。


然后我的想法recycleview嵌套recycleview,当然网上也有用ExpandableListView实现的 http://blog.csdn.net/u013278099/article/details/50822074

我的思想就是判断最下层 既就是商品(红色的Item) 来确定是否让店铺全选(灰色的Item),然后再判断店铺的选中状态,再判断最外层也就是最外面的全选功能。

然后我们list<List<Bean>>来记录他们的选中状态

店铺(灰色Item)的bean类

public class Bean {
    private Boolean isClick;
    private List<ChildBean> mChildBeen;

    public List<ChildBean> getChildBeen() {
        return mChildBeen;
    }

    public void setChildBeen(List<ChildBean> childBeen) {
        mChildBeen = childBeen;
    }

    public Boolean getClick() {
        return isClick;
    }

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

商品(红色Item)的bean类

    public class ChildBean {
    private Boolean isclick;

    public Boolean getIsclick() {
        return isclick;
    }

    public void setIsclick(Boolean isclick) {
        this.isclick = isclick;
    }
}

然后就是逻辑,红色Item 下层recycleview的Adapter的逻辑

        holder.second.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mBean.getChildBeen().get(position).setIsclick(!mBean.getChildBeen().get(position).getIsclick());
            notifyDataSetChanged();
            for (int i = 0; i < mBean.getChildBeen().size(); i++) {
                if(!mBean.getChildBeen().get(i).getIsclick()){
                    isallclick = false;
                    break;
                }else {
                    isallclick = true;
                }
            }
            if(isallclick){
                Toast.makeText(mContext,"全选了",Toast.LENGTH_LONG).show();
                mBean.setClick(true);
                mFirstAdapter.notifyDataSetChanged();
            }else {
                mBean.setClick(false);
                mFirstAdapter.notifyDataSetChanged();
            }
        }
    });

解析一下 isallclick是一个判断是否全选的标记 先判断一下红色的Item都有没有被选中如果没有则退出循环 isallclick为false,如果有则为true,然后刷新数据更新视图。

灰色Item 上层recycleview的Adapter的逻辑

//    判断有没有进行全选了 最外面的有没有全选
private void Isallclick(){
    for (Bean bean: firstclick) {
        if(bean.getClick()){
            isallclick = true;
        }else {
            isallclick = false;
            break;
        }
    }
    if(isallclick){
        mclick.setImageResource(R.drawable.check);
    }else {
        mclick.setImageResource(R.drawable.nocheck);
    }
}

跟上面的逻辑差不多一样 但是注意一点就是 如果红色Item全部点光了那么最外层的全选也是显示选中的样式。所以这个方也调用的地方有两处,在灰色Item点击事件里面,在onBindViewHolder里面。

最后就是判断最外层的全选了,只要我知道灰色Item有没有全选就可以了。

最后附上源码 https://github.com/justafreshman/TestAllSelect

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11744次
    • 积分:378
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:7篇
    • 译文:0篇
    • 评论:10条
    最新评论