购物车及加减器的实现

二级列表适配器
public class MyAdapter extends BaseExpandableListAdapter {
private Context context;
private List<Data.DataBean> list;

//创建有参和无参构造方法
public MyAdapter(Context context, List<Data.DataBean> list) {
    this.context = context;
    this.list = list;
}

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

@Override
public int getChildrenCount(int groupPosition) {
    //二级列表
    return list.get(groupPosition).getSpus().size();
}

@Override
public Object getGroup(int groupPosition) {
    return null;
}

@Override
public Object getChild(int groupPosition, int childPosition) {
    return null;
}

@Override
public long getGroupId(int groupPosition) {
    return 0;
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return 0;
}

@Override
public boolean hasStableIds() {
    return false;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    groupHolder groupHolder=null;
    if (groupHolder==null){
        convertView = View.inflate(context, R.layout.grouplist, null);
        groupHolder = new groupHolder();
        groupHolder.checkBox=convertView.findViewById(R.id.checkbox);
        groupHolder.title=convertView.findViewById(R.id.title);
        convertView.setTag(groupHolder);
    }
    else{
        groupHolder = (MyAdapter.groupHolder) convertView.getTag();
    }

        //得到小组的名字
    Data.DataBean bean = list.get(groupPosition);
    groupHolder.title.setText(bean.getName()+"");

    return convertView;
}

@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
     childHolder childHolder=null;
     if (childHolder==null){
         convertView = View.inflate(context, R.layout.childlist, null);
         childHolder = new childHolder();
         childHolder.checkBox1=convertView.findViewById(R.id.Child_Check_CB);
         childHolder.img=convertView.findViewById(R.id.img);
         childHolder.title=convertView.findViewById(R.id.Child_title);
         childHolder.price=convertView.findViewById(R.id.Child_price);
         childHolder.jiaJianView=convertView.findViewById(R.id.jiajian);
         convertView.setTag(childHolder);
     }
     else{
         childHolder = (MyAdapter.childHolder) convertView.getTag();
     }
    Data.DataBean.SpusBean bean = list.get(groupPosition).getSpus().get(childPosition);
    Glide.with(context).load(bean.getPic_url()).into(childHolder.img);
    childHolder.price.setText(bean.getSkus().get(0).getPrice()+"");
    childHolder.title.setText(bean.getName()+"");
    childHolder.checkBox1.setChecked(bean.isChildChecked());
    childHolder.jiaJianView.setmNumber(bean.getPraise_num());
    childHolder.checkBox1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (adapterCallback!=null){
                adapterCallback.setChildCheck(groupPosition,childPosition);
            }
        }
    });
    childHolder.jiaJianView.setOnChange(new JiaJianView.OnCountChange() {
        @Override
        public void setCount(int count) {
            if (adapterCallback!=null){
                adapterCallback.setNumber(groupPosition,childPosition,count);
            }
        }
    });

    return convertView;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return false;
}

//接口进行展示数据
class groupHolder {
    CheckBox checkBox;
    TextView title;
}
class childHolder{
     CheckBox checkBox1;
     ImageView img;
     TextView title;
     TextView price;
     JiaJianView jiaJianView;
}
//点击Group的checkbOX让所有CHILDxuanzhong
public  void childAllCheck(int groupPostion,boolean isCheck){
    Data.DataBean bean = list.get(groupPostion);
    List<Data.DataBean.SpusBean> spus = bean.getSpus();
    for (int i = 0; i <spus.size() ; i++) {
        Data.DataBean.SpusBean spusBean = spus.get(i);
        spusBean.setChildChecked(isCheck);
    }

}
//用来判断小组是否全被选中
public boolean isChildAllCheck(int groupPostion){
    boolean boo=true;
    Data.DataBean dataBean = list.get(groupPostion);
    List<Data.DataBean.SpusBean> spus = dataBean.getSpus();
    for (int i = 0; i <spus.size() ; i++) {
        Data.DataBean.SpusBean bean = spus.get(i);
        if (!bean.isChildChecked()){
            return false;
        }
    }
    return boo;
}
//点击child给她进行赋值
public void setChildChecked(int groupPositon,int childPostion,boolean isCheckbox){
    Data.DataBean.SpusBean spusBean = list.get(groupPositon).getSpus().get(childPostion);
    spusBean.setChildChecked(isCheckbox);
}
//查看当前这个商品有没有被选中
public boolean isChildChecked(int groupPositon,int childPostion ){
    Data.DataBean.SpusBean spusBean = list.get(groupPositon).getSpus().get(childPostion);
    if (spusBean.isChildChecked()){
        return  true;
    }
    return false;
}
//给商品数量赋值
public void setShangPingNumber(int groupPosition, int childPosition, int number) {
    Data.DataBean.SpusBean spusBean = list.get(groupPosition).getSpus().get(childPosition);
    spusBean.setPraise_num(number);
}
//底部按钮实现全选反选功能
public boolean isAllGoods() {
    boolean boo = true;
    for (int i = 0; i < list.size(); i++) {
        Data.DataBean dataBean = list.get(i);
        for (int j = 0; j < dataBean.getSpus().size(); j++) {
            Data.DataBean.SpusBean spusBean = dataBean.getSpus().get(j);
            if (!spusBean.isChildChecked()) {
                boo = false;
            }
        }
    }
    return boo;
}

//全选反选功能
public void setAllGoodsIsChecked(boolean isAllCheck){
for (int i = 0; i <list.size() ; i++) {
Data.DataBean dataBean = list.get(i);
for (int j = 0; j <dataBean.getSpus().size() ; j++) {
Data.DataBean.SpusBean spusBean = dataBean.getSpus().get(j);
spusBean.setChildChecked(isAllCheck);
}

    }
}
//计算所有商品的数量
public  int getAllGoodsPrice(){
    int allPrice=0;
    for (int i = 0; i <list.size() ; i++) {
        Data.DataBean dataBean = list.get(i);
        for (int j = 0; j <dataBean.getSpus().size() ; j++) {
            Data.DataBean.SpusBean spusBean = dataBean.getSpus().get(j);
            if (spusBean.isChildChecked()){
                allPrice+=spusBean.getPraise_num()*Float.parseFloat(spusBean.getSkus().get(0).getPrice());
            }
        }
    }
    return  allPrice;
}
//计算所有商品的数量
public  int getAllGoodsNumber(){
    int allNumber=0;
    for (int i = 0; i <list.size() ; i++) {
        Data.DataBean dataBean = list.get(i);
        for (int j = 0; j <dataBean.getSpus().size() ; j++) {
            Data.DataBean.SpusBean spusBean = dataBean.getSpus().get(j);
            if (spusBean.isChildChecked()){
                allNumber+=spusBean.getPraise_num();
            }
        }
    }
       return  allNumber;
}
//点击group的checkBox让所有child被选中
//因为点击Group和Child第CheckBox在主页面都需要刷新值所以做成接口回调
public interface AdapterCallback{
    void  setGroupCheck(int groupPostion);
    void setChildCheck(int groupPostion,int childPostion);
    //点击加减按钮进行刷新
    void  setNumber(int groupPostion,int childPostion,int number);
}

private AdapterCallback adapterCallback;

public void setCallback(AdapterCallback adapterCallback) {
    this.adapterCallback = adapterCallback;
}

}
MainActivity
public class MainActivity extends AppCompatActivity {

private CheckBox qx;
private TextView price;
private TextView js;
private ExpandableListView expanded_menu;
private List<Data.DataBean> list=new ArrayList<>();
private MyAdapter myAdapter;
private String Murl="http://www.wanandroid.com/tools/mockapi/6523/restaurant-list";

//设置Handler发送消息
private Handler mHandler=new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        String S = (String) msg.obj;
        Gson gson = new Gson();
        Data data = gson.fromJson(S, Data.class);
        list.addAll(data.getData());
        myAdapter.notifyDataSetChanged();


    }
};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
   myAdapter= new MyAdapter(this,list);
    //设置适配器
    expanded_menu.setAdapter(myAdapter);
    getNetData();
    setOnListener();



}

private void setOnListener() {
  myAdapter.setCallback(new MyAdapter.AdapterCallback() {
        @Override
        public void setGroupCheck(int groupPostion) {
            boolean childAllCheck = myAdapter.isChildAllCheck(groupPostion);
            myAdapter.childAllCheck(groupPostion, !childAllCheck);
            myAdapter.notifyDataSetChanged();
            flushBottomLayout();
        }

        @Override
        public void setChildCheck(int groupPostion, int childPostion) {
            //得到你要点击的商品Child是否是选中状态
            boolean childChecked = myAdapter.isChildChecked(groupPostion, childPostion);
            myAdapter.setChildChecked(groupPostion, childPostion, !childChecked);
            myAdapter.notifyDataSetChanged();
            flushBottomLayout();
        }

        @Override
        public void setNumber(int groupPostion, int childPostion, int number) {
            myAdapter.setShangPingNumber(groupPostion, childPostion, number);
            myAdapter.notifyDataSetChanged();
            flushBottomLayout();
        }
    });

}

//开始解析数据
private void getNetData() {
    OkHttpClient okHttpClient = new OkHttpClient();
    Request request = new Request.Builder().url(Murl).build();
    okHttpClient.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {

        }

        //成功
        @Override
        public void onResponse(Call call, Response response) throws IOException {
         //fasongxiaox
            mHandler.sendMessage(mHandler.obtainMessage(0,response.body().string()));
        }
    });
qx.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
     boolean allGoods = myAdapter.isAllGoods();
        myAdapter.setAllGoodsIsChecked(!allGoods);
        //刷新数据
        myAdapter.notifyDataSetChanged();
        flushBottomLayout();

    }
});
}


private void initView() {
    qx = (CheckBox) findViewById(R.id.qx);
    price = (TextView) findViewById(R.id.price);
    js = (TextView) findViewById(R.id.js);
    expanded_menu = (ExpandableListView) findViewById(R.id.expanded_menu);
     //去掉小箭头
    expanded_menu.setGroupIndicator(null);
}

//刷新底部数据
private void  flushBottomLayout(){
boolean allGoods = myAdapter.isAllGoods();
    qx.setChecked(allGoods);
     float allGoodsPrice = myAdapter.getAllGoodsPrice();
    int allGoodsNumber = myAdapter.getAllGoodsNumber();
    price.setText("价格"+allGoodsPrice);
    js.setText("去结算"+allGoodsNumber);
}

}
childList中的checkBox要设置成false
子布局中要加入加减器

加减器的实现
public class JiaJianView extends LinearLayout implements View.OnClickListener {

private TextView mDelete;
private TextView mNumber;
private TextView mAdd;

private int mCount;
private int number;
public JiaJianView(Context context, AttributeSet attrs) {
    super(context, attrs);

    LayoutInflater.from(context).inflate(R.layout.add, this);
    initViews();
}

private void initViews() {

     mAdd = findViewById(R.id.add_tv);
    mDelete = findViewById(R.id.delete_tv);
    mNumber = findViewById(R.id.product_number_tv);
    mAdd.setOnClickListener(this);
    mDelete.setOnClickListener(this);

}

public void setmNumber(int number){
    this.mCount=number;
    mNumber.setText(number+"");
}
@Override
public void onClick(View v) {

    switch (v.getId()) {
        case R.id.delete_tv:
            if (mCount > 0) {
                mCount--;
                mNumber.setText(mCount + "");
                if (mCountChange!=null){
                    mCountChange.setCount(mCount);
                }
            }else {

            }
            break;
        case R.id.add_tv:
            mCount++;
            mNumber.setText(mCount + "");
            if (mCountChange!=null){
                mCountChange.setCount(mCount);
            }
            break;
    }

}

public interface OnCountChange {
    void setCount(int count);
}

private OnCountChange mCountChange;

public void setOnChange(OnCountChange countChange) {
    this.mCountChange = countChange;
}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值