分类,+购物车 +定位(下)

//付属

MyAdapter
package com.example.thinkpad.wsjykmn.app;

import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.thinkpad.wsjykmn.R;
import com.example.thinkpad.wsjykmn.model.bean.Guwbean;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MyAdapter extends BaseExpandableListAdapter {
    private List<Guwbean.DataBean> sellerData;

    public MyAdapter(List<Guwbean.DataBean> sellerData) {
        this.sellerData = sellerData;
    }

    //商家集合的长度
    @Override
    public int getGroupCount() {
        return sellerData == null ? 0 : sellerData.size();
    }

    //商品集合的长度
    @Override
    public int getChildrenCount(int groupPosition) {
        return sellerData.get(groupPosition).getList() == null ? 0 : sellerData.get(groupPosition).getList().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(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        //获取数据
        Guwbean.DataBean dataBean = sellerData.get(groupPosition);
        ParentViewHolder parentViewHolder;
        if (convertView == null) {
            convertView = View.inflate(parent.getContext(), R.layout.item_cart_parent, null);
            parentViewHolder = new ParentViewHolder(convertView);
            convertView.setTag(parentViewHolder);
        } else {
            parentViewHolder = (ParentViewHolder) convertView.getTag();
        }
        //赋值
        parentViewHolder.sellerNameTv.setText(dataBean.getSellerName());
        //商家下商品是是否全部选中的值
        boolean currentSellerAllProductSelected = isCurrentSellerAllProductSelected(groupPosition);
        //设置商家checkBox的状态
        parentViewHolder.sellerCb.setChecked(currentSellerAllProductSelected);
        //
        parentViewHolder.sellerCb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onCartListChangeListener != null) {
                    /*不懂*/
                    onCartListChangeListener.onSellerCheckedChange(groupPosition);
                }
            }
        });
        return convertView;
    }
    //当前商家所有商品是否被选中
     public   boolean isCurrentSellerAllProductSelected(int groupPosition) {
        //获取商品集合
        List<Guwbean.DataBean.ListBean> list = sellerData.get(groupPosition).getList();
        //将商品集合遍历判断选择值
        for (Guwbean.DataBean.ListBean listBean : list) {
            if (listBean.getSelected() == 0) {
                return false;
            }
        }
        return true;
    }
    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        List<Guwbean.DataBean.ListBean> list = sellerData.get(groupPosition).getList();
        Guwbean.DataBean.ListBean listBean = list.get(childPosition);
        ChildViewHolder childViewHolder;
        if(convertView==null){
            convertView=View.inflate(parent.getContext(), R.layout.item_cart_child, null);
            childViewHolder = new ChildViewHolder(convertView);
            convertView.setTag(childViewHolder);
        } else{
           childViewHolder=(ChildViewHolder) convertView.getTag();
        }
        //商品名字
        childViewHolder.productTitleNameTv.setText(listBean.getTitle());
        //商品单价
        childViewHolder.productPriceTv.setText(listBean.getPscid()+"");
        //商品的checkBox状态
        childViewHolder.childCb.setChecked(listBean.getSelected() ==1);
        //商品的点击事件
        childViewHolder.childCb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onCartListChangeListener!=null){
                /*终*/    onCartListChangeListener.onProductCheckedChange(groupPosition,childPosition);
                }
            }
        });
        childViewHolder.addRemoveView.setNumber(listBean.getNum());
        //拿到商品最新的数量
        childViewHolder.addRemoveView.setOnNumbelChanglistener(new MyAddSubView.OnNumbelChanglistener() {
            @Override
            public void OnNumbelChange(int num) {
                 if(onCartListChangeListener!=null){
                     onCartListChangeListener.onProductNumberChange(groupPosition,childPosition,num);
                 }
            }
        });
        return convertView;
    }
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return false;
    }
    //判断上商品是不是全部被选中
    public  boolean isAllProductsSelected(){
        for(int i=0; i<sellerData.size();i++){
            //获取商品的数据
            Guwbean.DataBean dataBean = sellerData.get(i);
            List<Guwbean.DataBean.ListBean> list = dataBean.getList();
            for(int j=0; j<list.size();j++){
                   if(list.get(j).getSelected()==0){
                       return  false;
                   }
            }
        }
        return true;
    }
    //计算商品的价格
    public  float calculateTotalPrice(){
        float  totaPrice =0;
        for (int i=0;i<sellerData.size();i++){
            Guwbean.DataBean dataBean = sellerData.get(i);
            List<Guwbean.DataBean.ListBean> list = dataBean.getList();
            for(int j=0; j<list.size();j++){
                if (list.get(j).getSelected()==1) {
                    //获取每个商品的单价
                    float price = list.get(j).getPrice();
                    //商品的数量
                    int num = list.get(j).getNum();
                    totaPrice+=price * num;
                }
            }
        }
        return  totaPrice;
    }
    //商品的购买数量
    public  int calvulateTotalNumber(){
        int totalNumber = 0;
        for (int i = 0; i < sellerData.size(); i++) {
            Guwbean.DataBean dataBean = sellerData.get(i);
            List<Guwbean.DataBean.ListBean> list = dataBean.getList();
            for (int j = 0; j < list.size(); j++) {
                //只要是选中状态
                if (list.get(j).getSelected() == 1) {
                    int num = list.get(j).getNum();
                    totalNumber += num;
                }
            }
        }
        return  totalNumber;
    }
    //当商家得checkbox被点击得时候调用,设置当前商家得所有商品得状态
    public void changeCurrentSellerAllProductsStatus(int groupPosition, boolean isSelected) {
        Guwbean.DataBean dataBean = sellerData.get(groupPosition);
        List<Guwbean.DataBean.ListBean> listBeans = dataBean.getList();
        for (int i = 0; i < listBeans.size(); i++) {
            Guwbean.DataBean.ListBean listBean = listBeans.get(i);
            listBean.setSelected(isSelected ? 1 : 0);
        }
    }
    //当商品得checkbox被点击得时候调用,改变当前商品状态
    public void changeCurrentProductStatus(int groupPosition, int childPosition) {
        Guwbean.DataBean dataBean = sellerData.get(groupPosition);
        List<Guwbean.DataBean.ListBean> listBeans = dataBean.getList();
        Guwbean.DataBean.ListBean listBean = listBeans.get(childPosition);
        listBean.setSelected(listBean.getSelected() == 0 ? 1 : 0);
    }

    //当加减器被点击得时候调用,改变当前商品得数量
    public void changeCurrentProductNumber(int groupPosition, int childPosition, int number) {
        Guwbean.DataBean dataBean = sellerData.get(groupPosition);
        List<Guwbean.DataBean.ListBean> listBeans = dataBean.getList();
        Guwbean.DataBean.ListBean listBean = listBeans.get(childPosition);
        listBean.setNum(number);
    }

    //设置所有商品得状态
    public void changeAllProductsStatus(boolean selected) {
        for (int i = 0; i < sellerData.size(); i++) {
            Guwbean.DataBean dataBean = sellerData.get(i);
            List<Guwbean.DataBean.ListBean> list = dataBean.getList();
            for (int j = 0; j < list.size(); j++) {
                list.get(j).setSelected(selected?1:0);
            }
        }
    }
    static class ParentViewHolder {
        @BindView(R.id.seller_cb)
        CheckBox sellerCb;
        @BindView(R.id.seller_name_tv)
        TextView sellerNameTv;

        ParentViewHolder(View view) {
            ButterKnife.bind(this, view);
        }
    }

    OnCartListChangeListener onCartListChangeListener;

    public void setOnCartListChangeListener(OnCartListChangeListener onCartListChangeListener) {
        this.onCartListChangeListener = onCartListChangeListener;
    }

    public interface OnCartListChangeListener {
        //传递的商家
        void onSellerCheckedChange(int groupPostition);

        //传递精确的商品
        void onProductCheckedChange(int groupPosition, int childPosition);

        //精确商品的增减器的变化
        void onProductNumberChange(int groupPosition, int childPosition, int number);
    }

    static class ChildViewHolder {
        @BindView(R.id.child_cb)
        CheckBox childCb;
        @BindView(R.id.product_icon_iv)
        ImageView productIconIv;
        @BindView(R.id.product_title_name_tv)
        TextView productTitleNameTv;
        @BindView(R.id.product_price_tv)
        TextView productPriceTv;
        @BindView(R.id.add_remove_view)
        MyAddSubView addRemoveView;
        ChildViewHolder(View view) {
            ButterKnife.bind(this, view);
        }
    }
}
购物车+-器      MyAddSubView
 
 
package com.example.thinkpad.wsjykmn.app;

import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.example.thinkpad.wsjykmn.R;



import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MyAddSubView extends LinearLayout implements View.OnClickListener {
    //获取控件
    @BindView(R.id.sun_tv)
    TextView sunTv;
    @BindView(R.id.product_number_tv)
    TextView productNumberTv;
    @BindView(R.id.add_tv)
    TextView addTv;
   private  int number =1;
    public MyAddSubView(Context context) {
        super(context);
    }
    public MyAddSubView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        View view = inflate(context, R.layout.add_remove_view_layput, this);
        ButterKnife.bind(view);

        sunTv.setOnClickListener(this);
        addTv.setOnClickListener(this);

    }
   /* @OnClick({R.id.sun_tv, R.id.add_tv})
    public void onViewClicked(View view) {
                switch (view.getId()) {
                    //点击减号
            case R.id.sun_tv:
                if(number>1){
                    --number;
                    productNumberTv.setText(number+"");
                    if(onNumbelChanglistener!=null){
                       onNumbelChanglistener.OnNumbelChange(number);
                    }
            }else{
                    Toast.makeText(getContext(),"不能在少了",Toast.LENGTH_LONG).show();
                }
                break;
            case R.id.add_tv:
                    ++number;
                    productNumberTv.setText(number+"");
                    if(onNumbelChanglistener!=null){
                        onNumbelChanglistener.OnNumbelChange(number);
                    }
                break;
        }
    }*/

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
        productNumberTv.setText(number+"");

    }

    OnNumbelChanglistener onNumbelChanglistener;

    public void setOnNumbelChanglistener(OnNumbelChanglistener onNumbelChanglistener) {
        this.onNumbelChanglistener = onNumbelChanglistener;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            //点击减号
            case R.id.sun_tv:
                if(number>1){
                    --number;
                    productNumberTv.setText(number+"");
                    if(onNumbelChanglistener!=null){
                        onNumbelChanglistener.OnNumbelChange(number);
                    }
                }else{
                    Toast.makeText(getContext(),"不能在少了",Toast.LENGTH_LONG).show();
                }
                break;
            case R.id.add_tv:
                ++number;
                productNumberTv.setText(number+"");
                if(onNumbelChanglistener!=null){
                    onNumbelChanglistener.OnNumbelChange(number);
                }
                break;
        }
    }

    //告诉外面一种商品买了几个
    interface  OnNumbelChanglistener{
          void  OnNumbelChange(int num);
    }
}

祝合控件    MyApp
package com.example.thinkpad.wsjykmn.app;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.thinkpad.wsjykmn.R;
public class MyApp extends LinearLayout {
    public MyApp(Context context) {
        super(context);
    }

    public MyApp(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public MyApp(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyApp, 0, 0);
        String title_text = typedArray.getString(R.styleable.MyApp_title_text);
        String title_text_right = typedArray.getString(R.styleable.MyApp_title_text_right);
        int title_color = typedArray.getColor(R.styleable.MyApp_title_color, Color.BLACK);
        int title_color_right = typedArray.getColor(R.styleable.MyApp_title_color_right,Color.BLACK);
        View inflate = inflate(context, R.layout.gw_bia, this);
        TextView gw_bia_tv = inflate.findViewById(R.id.gw_bia_tv);
        TextView gw_right_tv = inflate.findViewById(R.id.gw_right_tv);
        gw_bia_tv.setText(title_text);
        gw_bia_tv.setTextColor(title_color);
        gw_right_tv.setTextColor(title_color_right);
        gw_right_tv.setText(title_text_right);
    }
}

model

package com.example.thinkpad.wsjykmn.model;

import com.example.thinkpad.wsjykmn.model.util.HttpConfig;
import com.example.thinkpad.wsjykmn.model.util.OkHttpUtil;

import java.util.HashMap;


public class Gowumodel {
    public  void login(final IGuwmodel iGuwmodel){
        HashMap<String ,String> map = new HashMap<>();
        map.put("uid","71");
        OkHttpUtil instance = OkHttpUtil.getInstance();
        instance.dopost(HttpConfig.gowu, map, new OkHttpUtil.OkCallback() {
            @Override
            public void onFailure(Exception e) {
                if (iGuwmodel!=null){
                    iGuwmodel.onFailure(e);
                }
            }
            @Override
            public void onResponse(String json) {
                   if (iGuwmodel!=null){
                       iGuwmodel.onResponse(json);
                }
            }
        });
    }
   public interface  IGuwmodel{
        void onFailure(Exception e);
        void onResponse(String json);
    }
}

p层

package com.example.thinkpad.wsjykmn.pesntes;

import com.example.thinkpad.wsjykmn.model.Gowumodel;
import com.example.thinkpad.wsjykmn.model.bean.Guwbean;
import com.example.thinkpad.wsjykmn.view.IGowu;
import com.google.gson.Gson;

import java.util.List;

public class GowuPresenter {
    IGowu iGowu;
    private List<Guwbean.DataBean> sellerData;
    private final Gowumodel gowumodel;

    public  GowuPresenter(IGowu iGowu){
         this.iGowu=iGowu;
         gowumodel = new Gowumodel();
     }
     public  void login(){
         gowumodel.login(new Gowumodel.IGuwmodel() {
             @Override
             public void onFailure(Exception e) {
             }
             @Override
             public void onResponse(String json) {
                 Gson gson = new Gson();
                 Guwbean guwbean = gson.fromJson(json, Guwbean.class);
                 sellerData = guwbean.getData();
                 if("0".equalsIgnoreCase(guwbean.getCode())){
                      if(iGowu!=null){
                          iGowu.onResponse(sellerData);
                      }
                 }
             }
         });
     }
}

view

package com.example.thinkpad.wsjykmn.view;

import com.example.thinkpad.wsjykmn.model.bean.Guwbean;

import java.util.List;

public interface IGowu {
    void onResponse(List<Guwbean.DataBean> sellerData);
}
package com.example.thinkpad.wsjykmn.view;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.TextView;

import com.example.thinkpad.wsjykmn.R;
import com.example.thinkpad.wsjykmn.app.MyAdapter;
import com.example.thinkpad.wsjykmn.model.bean.Guwbean;
import com.example.thinkpad.wsjykmn.pesntes.GowuPresenter;

import java.util.HashMap;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity implements IGowu{
    private static final String TAG = "MainActivity------";

    @BindView(R.id.el_cart)
    ExpandableListView elCart;
    @BindView(R.id.cb_care_all_select)
    CheckBox cbCareAllSelect;
    @BindView(R.id.tv_cart_total_price)
    TextView tvCartTotalPrice;
    @BindView(R.id.btn_cart_pay)
    Button btnCartPay;
    private GowuPresenter gowuPresenter;
    private  MyAdapter myAdapter;

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

    private void initData() {
        gowuPresenter = new GowuPresenter(this);
        gowuPresenter.login();
    }

    @OnClick(R.id.cb_care_all_select)
    public void onViewClicked() {
        //底部全选按钮
        //时候所有得商品都被选中
        boolean allProductsSelected = myAdapter.isAllProductsSelected();
        myAdapter.changeAllProductsStatus(!allProductsSelected);
        myAdapter.notifyDataSetChanged();
        //刷新底部数据
        refreshSelectedAndTotalPriceAndTotalNumber();
    }

    @Override
    public void onResponse(List<Guwbean.DataBean> sellerData) {
        Log.d(TAG, "onResponse: "+"741852963jkghnnvbdghfyjfgjk");
        myAdapter = new MyAdapter(sellerData);
        myAdapter.setOnCartListChangeListener(new MyAdapter.OnCartListChangeListener() {
            @Override
            public void onSellerCheckedChange(int groupPostition) {
                //商家被点击
                boolean currentSellerAllProductSelected = myAdapter.isCurrentSellerAllProductSelected(groupPostition);
                myAdapter.changeCurrentSellerAllProductsStatus(groupPostition,!currentSellerAllProductSelected);
                myAdapter.notifyDataSetChanged();
                //刷新底部数据
                refreshSelectedAndTotalPriceAndTotalNumber();
            }
            @Override
            public void onProductCheckedChange(int groupPosition, int childPosition) {

                //点击商品得checkbox
                myAdapter.changeCurrentProductStatus(groupPosition,childPosition);
                myAdapter.notifyDataSetChanged();
                //刷新底部数据
                refreshSelectedAndTotalPriceAndTotalNumber();

            }

            @Override
            public void onProductNumberChange(int groupPosition, int childPosition, int number) {
                //当加减被点击
                myAdapter.changeCurrentProductNumber(groupPosition,childPosition,number);
                myAdapter.notifyDataSetChanged();
                //刷新底部数据
                refreshSelectedAndTotalPriceAndTotalNumber();
                //联网更新网络上得商品数量
            }

        });
        elCart.setAdapter(myAdapter);
        //展开二级列表
        for (int i=0;i<sellerData.size();i++){
            elCart.expandGroup(i);
        }
        //刷新checkbox状态和总价和总数量
        refreshSelectedAndTotalPriceAndTotalNumber();
    }

    //刷新checkbox状态和总价和总数量
    private void refreshSelectedAndTotalPriceAndTotalNumber() {
        //去判断是否所有得商品都被选中
        boolean allProductsSelected = myAdapter.isAllProductsSelected();
        //设置给全选checkBox
        cbCareAllSelect.setChecked(allProductsSelected);//cbCartAllSelect

        //计算总价
        float totalPrice = myAdapter.calculateTotalPrice();
        tvCartTotalPrice.setText("总价 " + totalPrice);

        //计算总数量
        int totalNumber = myAdapter.calvulateTotalNumber();
        btnCartPay.setText("去结算(" + totalNumber + ")");

    }

}

猜你喜欢

转载自blog.csdn.net/wsj19970717/article/details/80876692