仿购物车

//全局控件上写,解决焦点冲突
android:descendantFocusability=“blocksDescendants”

//自定义加加减减
public class AddSub extends LinearLayout {

private View mView;
private TextView add,num,sub;
private OnNumListener mOnNumListener;

public void setOnNumListener(OnNumListener onNumListener) {
    mOnNumListener = onNumListener;
}

public AddSub(Context context) {
    this(context,null);
}

public AddSub(Context context, AttributeSet attrs) {
    this(context, attrs,-1);
}

public AddSub(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initView(context);
    initListener();
    getCount();
}

private void initListener() {
    add.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            jia();
        }
    });
    sub.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            jian();
        }
    });
}

public void initView(Context context){
    mView = View.inflate(context, R.layout.zdy, this);
    sub = mView.findViewById(R.id.subtext);
    num = mView.findViewById(R.id.numtext);
    add = mView.findViewById(R.id.addtext);

    num.setText("1");
}

public interface OnNumListener{
    void onNumChange(View view,int curNum);
}

public void jia(){
    String s = num.getText().toString();
    int anInt = Integer.parseInt(s);
    anInt++;
    setCurrentCount(anInt);
}

public void jian(){
    String s = num.getText().toString();
    int anInt = Integer.parseInt(s);
    if(anInt>1){
        anInt--;
        setCurrentCount(anInt);
    }else{
        Toast.makeText(getContext(),"111",Toast.LENGTH_SHORT).show();
    }
}

public void setCurrentCount(int number){
    num.setText(number+"");
    if(mOnNumListener!=null){
        mOnNumListener.onNumChange(this,number);
    }
}

public int getCount(){
    return Integer.parseInt(num.getText().toString());
}

}

//1.网络请求 单例模式 GET请求
public class OkHttp {
private static final String MEDIO_GET = “GET”;
private static OkHttpClient client;

//单例模式
private OkHttp(){}
//创建对象
public static void init(){
    client = new OkHttpClient.Builder()
            .connectTimeout(3000,TimeUnit.MILLISECONDS)
            .readTimeout(3000,TimeUnit.MILLISECONDS)
            .writeTimeout(3000,TimeUnit.MILLISECONDS)
            .build();
}

public static Request creat(String url, String method){
    Request.Builder builder = new Request.Builder().url(url);
    Request request = null;
    switch (method){
        case MEDIO_GET:
            request = builder.build();
            break;
    }
    return request;
}

public static void enqueueGet(String url, Callback callback){
    Request request = creat(url, MEDIO_GET);
    Call call = client.newCall(request);
    call.enqueue(callback);
}

}

//2.单例模式初始化
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
OkHttp.init();
}
}

//3.model层
public class OneModel {
public void one(String url, final HttpCallBack httpCallBack) {
OkHttp.enqueueGet(url, new Callback() {
@Override
public void onFailure(Call call, IOException e) {

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            final String s = response.body().string();
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    httpCallBack.getData(s);
                }
            });
        }
    });
}

Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
    }
};

public interface HttpCallBack {
    void getData(String name);
}

}

//4.view层
public interface OneView {
void onSuccess(String result);
void onFailer(String msg);
}

//5.presenter层
public class OnePresenter {
private OneView mOneView;
private OneModel mOneModel;

public OnePresenter(OneView oneView) {
    mOneView = oneView;
    mOneModel = new OneModel();
}

public void onePresenter(String url) {
    mOneModel.one(url, new OneModel.HttpCallBack() {
        @Override
        public void getData(String name) {
            if (name != null) {
                mOneView.onSuccess(name);
            } else {
                mOneView.onFailer("失败");
            }
        }
    });
}

}

//6.activity
public class MainActivity extends AppCompatActivity implements OneView {

private OnePresenter mOnePresenter;
private ExpandableListView exlistview;
private List<User.DataBean> list;
private OneAdapter oneAdapter;
private CheckBox all;
private TextView hj;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    exlistview = findViewById(R.id.exlistview);
    all = findViewById(R.id.all);
    hj = findViewById(R.id.hj);
    exlistview.setGroupIndicator(null);
    mOnePresenter = new OnePresenter(this);
    mOnePresenter.onePresenter(UrlUtil.PATH);
    all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                setCheckAll(1);
                getTotal();
            }else{
                setCheckAll(0);
                getTotal();
            }
        }
    });
}

public void getTotal(){
    double total = 0;
    int groupCount = oneAdapter.getGroupCount();
    for(int i =0;i<groupCount;i++){
        User.DataBean group = (User.DataBean) oneAdapter.getGroup(i);
        List<User.DataBean.ListBean> list = group.getList();
        for (int j = 0;j<list.size();j++){
            User.DataBean.ListBean bean = list.get(j);
            boolean checked = bean.isChecked();
            if(checked){
                double price = bean.getPrice();
                total+=price*bean.getNum();
            }
        }
    }
    hj.setText("合计:"+total);
}

public void setCheckAll(int s){
    int groupCount = oneAdapter.getGroupCount();
    for(int i = 0;i<groupCount;i++){
        User.DataBean item = (User.DataBean) oneAdapter.getGroup(i);
        List<User.DataBean.ListBean> itemList = item.getList();
        for (int j = 0;j<itemList.size();j++){
            User.DataBean.ListBean listBean = itemList.get(j);
            listBean.setSelected(s);
        }
    }
    oneAdapter.notifyDataSetChanged();
}

@Override
public void onSuccess(String result) {
    Gson gson = new Gson();
    User user = gson.fromJson(result, User.class);
    list = user.getData();
    oneAdapter = new OneAdapter(getApplicationContext(), list);
    exlistview.setAdapter(oneAdapter);
    for (int i = 0; i< oneAdapter.getGroupCount(); i++){
        exlistview.expandGroup(i);
    }
    initShopCartChange();
}

@Override
public void onFailer(String msg) {

}

private void initShopCartChange(){
    exlistview.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
        @Override
        public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
            User.DataBean group = (User.DataBean) oneAdapter.getGroup(groupPosition);
            group.setChecked(!group.isChecked());
            int c = 0;
            if(group.isChecked()){
                c=1;
            }
            List<User.DataBean.ListBean> list = group.getList();
            for (int i =0;i<list.size();i++){
                User.DataBean.ListBean bean = list.get(i);
                bean.setSelected(c);
            }
            getTotal();
            oneAdapter.notifyDataSetChanged();
            return true;
        }
    });

    exlistview.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
        @Override
        public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
            User.DataBean.ListBean child = (User.DataBean.ListBean) oneAdapter.getChild(groupPosition,childPosition);
            boolean checked = child.isChecked();
            if(checked){
                child.setSelected(0);
            }else{
                child.setSelected(1);
            }
            getTotal();
            oneAdapter.notifyDataSetChanged();
            return true;
        }
    });
}

}

//7.接口数据存储
public interface UrlUtil {
public String PATH = “http://www.zhaoapi.cn/product/getCarts?uid=71”;
}

//8.适配器
public class OneAdapter extends BaseExpandableListAdapter {

private Context mContext;
private List<User.DataBean> list;
private AddSub.OnNumListener mOnNumListener;

public void setOnNumListener(AddSub.OnNumListener onNumListener) {
    mOnNumListener = onNumListener;
}

public OneAdapter(Context context, List<User.DataBean> list) {
    mContext = context;
    this.list = list;
}

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

@Override
public int getChildrenCount(int groupPosition) {
    return list.get(groupPosition).getList().size();
}

@Override
public Object getGroup(int groupPosition) {
    return list.get(groupPosition);
}

@Override
public Object getChild(int groupPosition, int childPosition) {
    return list.get(groupPosition).getList().get(childPosition);
}

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

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

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

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    GroupViewHolder groupViewHolder = null;
    if(convertView == null){
        convertView = View.inflate(mContext, R.layout.group,null);
        groupViewHolder = new GroupViewHolder();
        groupViewHolder.group_box = convertView.findViewById(R.id.group_box);
        groupViewHolder.group_text = convertView.findViewById(R.id.group_text);
        convertView.setTag(groupViewHolder);
    }else{
        groupViewHolder = (GroupViewHolder) convertView.getTag();
    }
    groupViewHolder.group_box.setChecked(list.get(groupPosition).isChecked());
    groupViewHolder.group_text.setText(list.get(groupPosition).getSellerName());
    return convertView;
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    ChildViewHolder childViewHolder = null;
    if(convertView == null){
        convertView = View.inflate(mContext,R.layout.child,null);
        childViewHolder = new ChildViewHolder();
        childViewHolder.child_box = convertView.findViewById(R.id.child_box);
        childViewHolder.child_image = convertView.findViewById(R.id.child_image);
        childViewHolder.child_text1 = convertView.findViewById(R.id.child_text);
        childViewHolder.child_text2 = convertView.findViewById(R.id.child_text1);
        childViewHolder.mAddSub = convertView.findViewById(R.id.child_addsub);
        convertView.setTag(childViewHolder);
    }else{
        childViewHolder = (ChildViewHolder) convertView.getTag();
    }
    final User.DataBean.ListBean bean = this.list.get(groupPosition).getList().get(childPosition);
    bean.setChecked(false);
    childViewHolder.child_box.setChecked(bean.isChecked());
    childViewHolder.child_text1.setText(bean.getTitle());
    childViewHolder.child_text2.setText(""+bean.getPrice());
    String images = list.get(groupPosition).getList().get(0).getImages();
    String[] split = images.split("!");
    Picasso.with(mContext).load(split[0]).into(childViewHolder.child_image);
    childViewHolder.mAddSub.setOnNumListener(new AddSub.OnNumListener() {
        @Override
        public void onNumChange(View view, int curNum) {
            bean.setPrice(curNum);
            if(mOnNumListener!=null){
                mOnNumListener.onNumChange(view,curNum);
            }
        }
    });
    return convertView;
}

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

class GroupViewHolder{
    CheckBox group_box;
    TextView group_text;
}

class ChildViewHolder{
    CheckBox child_box;
    ImageView child_image;
    TextView child_text1;
    TextView child_text2;
    AddSub mAddSub;
}

}

//bean类
public class User {

private String msg;
private String code;
private List<DataBean> data;

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

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

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

public static class DataBean {
    private String sellerName;
    private String sellerid;
    private boolean isChecked;
    private List<ListBean> list;

    public boolean isChecked() {
        return isChecked;
    }

    public void setChecked(boolean checked) {
        isChecked = checked;
    }

    public String getSellerName() {
        return sellerName;
    }

    public void setSellerName(String sellerName) {
        this.sellerName = sellerName;
    }

    public String getSellerid() {
        return sellerid;
    }

    public void setSellerid(String sellerid) {
        this.sellerid = sellerid;
    }

    public List<ListBean> getList() {
        return list;
    }

    public void setList(List<ListBean> list) {
        this.list = list;
    }

    public static class ListBean {
        private double bargainPrice;
        private String createtime;
        private String detailUrl;
        private String images;
        private int num;
        private int pid;
        private double price;
        private double pscid;
        private int selected;
        private int sellerid;
        private String subhead;
        private String title;
        private boolean isChecked;

        public boolean isChecked() {
            return selected!=0;
        }

        public void setChecked(boolean checked) {
            isChecked = checked;
        }

        public double getBargainPrice() {
            return bargainPrice;
        }

        public void setBargainPrice(double bargainPrice) {
            this.bargainPrice = bargainPrice;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public String getDetailUrl() {
            return detailUrl;
        }

        public void setDetailUrl(String detailUrl) {
            this.detailUrl = detailUrl;
        }

        public String getImages() {
            return images;
        }

        public void setImages(String images) {
            this.images = images;
        }

        public int getNum() {
            return num;
        }

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

        public int getPid() {
            return pid;
        }

        public void setPid(int pid) {
            this.pid = pid;
        }

        public double getPrice() {
            return price;
        }

        public void setPrice(double price) {
            this.price = price;
        }

        public double getPscid() {
            return pscid;
        }

        public void setPscid(double pscid) {
            this.pscid = pscid;
        }

        public int getSelected() {
            return selected;
        }

        public void setSelected(int selected) {
            this.selected = selected;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }

        public String getSubhead() {
            return subhead;
        }

        public void setSubhead(String subhead) {
            this.subhead = subhead;
        }

        public String getTitle() {
            return title;
        }

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

}

猜你喜欢

转载自blog.csdn.net/weixin_42791904/article/details/84333831