仿购物车

//全局控件上写,解决焦点冲突
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;
        }
    }
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值