仿京东

这是一个关于实现京东风格购物车的Adapter的代码示例,包括父布局和子布局的XML设计以及对应的Java代码。适配器处理了商品选中、数量增减和删除等操作,并通过OkHttp进行API交互更新数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是购物车的Adapter

package com.example.mychewugou.adapter;


import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;


import com.bumptech.glide.Glide;
import com.example.mychewugou.R;
import com.example.mychewugou.bean.CartBean;
import com.example.mychewugou.bean.CountPriceBean;
import com.example.mychewugou.presenter.CartPresenter;
import com.example.mychewugou.util.ApiUtil;
import com.example.mychewugou.util.OkHttp3Util;
import com.example.mychewugou.view.MainActivity;


import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;


/**
 * Created by hasee on 2018/1/15.
 */


public class MyAdapter extends BaseExpandableListAdapter{
    private Context context;
    private CartBean cartBean;
    private Handler handler;
    private CartPresenter cartPresenter;
    private RelativeLayout relative_progress;


    private int size;
    private int childI;
    private int allSize;
    private int index;




    public MyAdapter(Context context, CartBean cartBean, Handler handler, CartPresenter cartPresenter, RelativeLayout relative_progress) {
        this.context = context;
        this.cartBean = cartBean;
        this.handler = handler;
        this.cartPresenter = cartPresenter;
        this.relative_progress = relative_progress;
    }


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


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


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


    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return cartBean.getData().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 b, View view, ViewGroup viewGroup) {
        final GroupHolder holder;
        if (view==null){
            view = View.inflate(context, R.layout.group_item_layout,null);
            holder = new GroupHolder();
            holder.check_group = view.findViewById(R.id.check_group);
            holder.text_group = view.findViewById(R.id.text_group);
            view.setTag(holder);
        }else {
            holder = (GroupHolder) view.getTag();
        }
        final CartBean.DataBean dataBean = cartBean.getData().get(groupPosition);
        holder.check_group.setChecked(dataBean.isGroupChecked());
        holder.text_group.setText(dataBean.getSellerName());
        holder.check_group.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                relative_progress.setVisibility(View.VISIBLE);//显示
                size = dataBean.getList().size();
                childI = 0;
                updateAllInGroup(holder.check_group.isChecked(),dataBean);
            }
        });
        return view;
    }


    private void updateAllInGroup(final boolean checked, final CartBean.DataBean dataBean) {
        CartBean.DataBean.ListBean listBean = dataBean.getList().get(childI);
        Map<String, String> params = new HashMap<>();
        params.put("uid","2809");
        params.put("sellerid", String.valueOf(listBean.getSellerid()));
        params.put("pid", String.valueOf(listBean.getPid()));
        params.put("selected", String.valueOf(checked ? 1:0));
        params.put("num", String.valueOf(listBean.getNum()));
        OkHttp3Util.doPost(ApiUtil.updateCartUrl, params, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()){
                    if (childI<size){
                        updateAllInGroup(checked,dataBean);
                    }
                    //所有的条目已经更新完成....再次请求查询购物车的数据
                    cartPresenter.getData(ApiUtil.cartUrl);
                }
            }
        });
    }


    @Override
    public View getChildView(int groupPosition, int childPosition, boolean b, View view, ViewGroup viewGroup) {
        ChildHolder holder;
        if (view ==null){
            view = View.inflate(context,R.layout.child_item_layout,null);
            holder = new ChildHolder();
            holder.text_add = view.findViewById(R.id.text_add);
            holder.text_num = view.findViewById(R.id.text_num);
            holder.text_jian = view.findViewById(R.id.text_jian);
            holder.text_title = view.findViewById(R.id.text_title);
            holder.text_price = view.findViewById(R.id.text_price);
            holder.image_good = view.findViewById(R.id.image_good);
            holder.check_child = view.findViewById(R.id.check_child);
            holder.text_delete = view.findViewById(R.id.text_delete);


            view.setTag(holder);
        }else {
            holder = (ChildHolder) view.getTag();
        }
        final CartBean.DataBean.ListBean listBean = cartBean.getData().get(groupPosition).getList().get(childPosition);
        holder.text_num.setText(listBean.getNum()+"");
        holder.text_price.setText("¥"+listBean.getBargainPrice()+"");
        holder.text_title.setText(listBean.getTitle());


        holder.check_child.setChecked(listBean.getSelected()==0? false:true);
        String[] split = listBean.getImages().split("\\|");
        Glide.with(context).load(split[0]).into(holder.image_good);


        holder.check_child.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                updateChildChecked(listBean);


            }
        });


        //加号
        holder.text_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //请求更新的接口
                updateChildNum(listBean,true);


            }
        });


        //减号
        holder.text_jian.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                if (listBean.getNum() == 1){
                    return;
                }


                //更新数量,,,减
                updateChildNum(listBean,false);


            }
        });


        //删除
        holder.text_delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                //显示progress
                relative_progress.setVisibility(View.VISIBLE);


                //uid=72&pid=1&source=android
                Map<String, String> params = new HashMap<>();
                params.put("uid","2809");
                params.put("pid", String.valueOf(listBean.getPid()));
                params.put("source","android");


                OkHttp3Util.doPost(ApiUtil.deleteCartUrl, params, new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {


                    }


                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        if (response.isSuccessful()){


                            //删除成功之后.....再次查询购物车
                            cartPresenter.getData(ApiUtil.cartUrl);


                        }
                    }
                });


            }
        });
        
        return view;
    }


    private void updateChildNum(CartBean.DataBean.ListBean listBean, boolean isAdded) {
        //一旦执行更新的操作,,,progressBar显示
        relative_progress.setVisibility(View.VISIBLE);


        //?uid=71&sellerid=1&pid=1&selected=0&num=10
        Map<String, String> params = new HashMap<>();
        params.put("uid","2809");
        params.put("sellerid", String.valueOf(listBean.getSellerid()));
        params.put("pid", String.valueOf(listBean.getPid()));
        params.put("selected", String.valueOf(listBean.getSelected()));


        if (isAdded){
            params.put("num", String.valueOf(listBean.getNum() + 1));
        }else {
            params.put("num", String.valueOf(listBean.getNum() - 1));
        }






        OkHttp3Util.doPost(ApiUtil.updateCartUrl, params, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {


            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //更新成功之后...网络上的数据发生了改变...再次请求购物车的接口进行数据的展示
                if (response.isSuccessful()){
                    cartPresenter.getData(ApiUtil.cartUrl);
                }
            }
        });


    }


    private void updateChildChecked(CartBean.DataBean.ListBean listBean) {
        //一旦执行更新的操作,,,progressBar显示
        relative_progress.setVisibility(View.VISIBLE);
        //?uid=71&sellerid=1&pid=1&selected=0&num=10
        Map<String, String> params = new HashMap<>();
        params.put("uid","2809");
        params.put("sellerid", String.valueOf(listBean.getSellerid()));
        params.put("pid", String.valueOf(listBean.getPid()));
        params.put("selected", String.valueOf(listBean.getSelected() == 0? 1:0));
        params.put("num", String.valueOf(listBean.getNum()));


        OkHttp3Util.doPost(ApiUtil.updateCartUrl, params, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {


            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //更新成功之后...网络上的数据发生了改变...再次请求购物车的接口进行数据的展示
                if (response.isSuccessful()){
                    cartPresenter.getData(ApiUtil.cartUrl);
                }
            }
        });
    }


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


    public void sendPriceAndCount() {
        double price = 0;
        int count = 0;


        //通过判断二级列表是否勾选,,,,计算价格数量
        for (int i=0;i<cartBean.getData().size();i++){


            for (int j = 0;j<cartBean.getData().get(i).getList().size();j++){
                if (cartBean.getData().get(i).getList().get(j).getSelected() == 1){
                    //价格是打折的价格...........
                    price += cartBean.getData().get(i).getList().get(j).getNum() * cartBean.getData().get(i).getList().get(j).getBargainPrice();
                    count += cartBean.getData().get(i).getList().get(j).getNum();
                }
            }
        }


        //精准的保留double的两位小数
        DecimalFormat decimalFormat = new DecimalFormat("#.00");
        String priceString = decimalFormat.format(price);




        CountPriceBean countPriceBean = new CountPriceBean(priceString, count);
        //发送...显示
        Message msg = Message.obtain();
        msg.what = 0;
        msg.obj = countPriceBean;


        handler.sendMessage(msg);
    }


    public void setAllChildState(boolean checked) {
        //创建一个集合 装所有的子条目
        List<CartBean.DataBean.ListBean> allList = new ArrayList<>();


        for (int i=0;i<cartBean.getData().size();i++){
            for (int j=0;j<cartBean.getData().get(i).getList().size();j++){
                allList.add(cartBean.getData().get(i).getList().get(j));
            }
        }


        relative_progress.setVisibility(View.VISIBLE);


        allSize = allList.size();
        index = 0;


        //通过 递归 更新所有子条目的选中
        updateAllChild(allList,checked);
    }


    private void updateAllChild(final List<CartBean.DataBean.ListBean> allList, final boolean checked) {
        CartBean.DataBean.ListBean listBean = allList.get(index);//0
        Map<String, String> params = new HashMap<>();
        params.put("uid","2809");
        params.put("sellerid", String.valueOf(listBean.getSellerid()));
        params.put("pid", String.valueOf(listBean.getPid()));
        params.put("selected", String.valueOf(checked ? 1:0));
        params.put("num", String.valueOf(listBean.getNum()));


        OkHttp3Util.doPost(ApiUtil.updateCartUrl, params, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {


            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {


                if (response.isSuccessful()){
                    index = index +1;//0,1,2......3
                    if (index < allSize){


                        updateAllChild(allList,checked);
                    }else {
                        //查询购物车
                        cartPresenter.getData(ApiUtil.cartUrl);
                    }
                }
            }
        });


    }


    private class GroupHolder{
        CheckBox check_group;
        TextView text_group;
    }


    private class ChildHolder{
        CheckBox check_child;
        ImageView image_good;
        TextView text_title;
        TextView text_price;
        TextView text_jian;
        TextView text_num;
        TextView text_add;
        TextView text_delete;
    }
}


订单的Adapter

package com.example.mychewugou.adapter;


import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;




import com.example.mychewugou.R;
import com.example.mychewugou.bean.MyDataDingDanBean;
import com.example.mychewugou.holder.MyDingDanHolder;
import com.example.mychewugou.presenter.Presenterdingdanq;
import com.example.mychewugou.util.ApiUtil;
import com.example.mychewugou.util.OkHttp3Util;


import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;


public class MyDingDanAdapter extends RecyclerView.Adapter<MyDingDanHolder> {
    private final Context context;
    private final List<MyDataDingDanBean.DataBean> list;
    private Presenterdingdanq presenter;
    private int page;


    public MyDingDanAdapter(Context context, List<MyDataDingDanBean.DataBean> list, Presenterdingdanq presenter, int page) {


        this.context = context;
        this.list = list;
        this.presenter = presenter;
        this.page = page;
    }






    @Override
    public MyDingDanHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_dingdan,parent, false);
        MyDingDanHolder holder = new MyDingDanHolder(view);
        return holder;
    }


    @Override
    public void onBindViewHolder(MyDingDanHolder holder, final int position) {


        holder.text_title.setText(list.get(position).getTitle());
        holder.text_price.setText("价格: "+list.get(position).getPrice());
        holder.text_tame.setText(list.get(position).getCreatetime());
        if (list.get(position).getStatus()==0){
            holder.text_daizhifu.setText("待支付");
            holder.text_daizhifu.setTextColor(Color.RED);
            holder.text_btn.setText("取消订单");
            holder.text_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {


                    AlertDialog.Builder builder = new AlertDialog.Builder(context);
                    builder.setTitle("提示");
                    builder.setMessage("确定要取消订单吗?");
                    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Map<String, String> params=new HashMap<>();
                            params.put("uid","3690");
                            params.put("orderId", String.valueOf(list.get(position).getOrderid()));
                            params.put("status", String.valueOf(2));
                            OkHttp3Util.doPost(ApiUtil.genxin, params, new Callback() {
                                @Override
                                public void onFailure(Call call, IOException e) {


                                }
                                @Override
                                public void onResponse(Call call, Response response) throws IOException {
                                    if (response.isSuccessful()){
                                        Log.d("+++++++++响哥1", String.valueOf(list.get(position).getStatus()));
                                        presenter.getDingUrl(ApiUtil.dingdan,page);
                                    }
                                }
                            });
                        }
                    });


                    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {


                        }
                    });
                    builder.show();


                }
            });


        }else if (list.get(position).getStatus()==1){
            holder.text_daizhifu.setText("已支付");
            holder.text_daizhifu.setTextColor(Color.BLACK);
            holder.text_btn.setText("查看订单");
        }else if (list.get(position).getStatus()==2){
            holder.text_daizhifu.setText("已取消");
            holder.text_daizhifu.setTextColor(Color.BLACK);
            holder.text_btn.setText("查看订单");
            holder.text_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {


                    AlertDialog.Builder builder = new AlertDialog.Builder(context);
                    builder.setTitle("提示");
                    builder.setMessage("确定循环利用吗?");
                    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Map<String, String> params = new HashMap<>();
                            params.put("uid", "3690");
                            params.put("orderId", String.valueOf(list.get(position).getOrderid()));
                            params.put("status", String.valueOf(0));
                            OkHttp3Util.doPost(ApiUtil.genxin, params, new Callback() {
                                @Override
                                public void onFailure(Call call, IOException e) {


                                }


                                @Override
                                public void onResponse(Call call, Response response) throws IOException {
                                    if (response.isSuccessful()) {


                                        Log.d("+++++++++响哥", String.valueOf(list.get(position).getStatus()));
                                        presenter.getDingUrl(ApiUtil.dingdan, page);
                                    }
                                }
                            });
                        }
                    });


                    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {


                        }
                    });
                    builder.show();
                }
            });


        }


    }


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



这是application类

package com.example.mychewugou.application;


import android.app.Application;
import android.content.Context;
import android.os.Handler;
import android.os.Process;


/**
 * Created by hasee on 2018/1/4.
 */


public class EApplication extends Application{
    private static Context context;
    private static Handler handler;
    private static int mainId;


    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        //初始化handler
        handler = new Handler();
        //主线程的id
        mainId = Process.myTid();
    }
    /**
     * 对外提供了context
     * @return
     */
    public static Context getAppContext() {
        return context;
    }


    /**
     * 得到全局的handler
     * @return
     */
    public static Handler getAppHanler() {
        return handler;
    }


    /**
     * 获取主线程id
     * @return
     */
    public static int getMainThreadId() {
        return mainId;
    }


}

这是待支付Fragment

package com.example.mychewugou.fragment;


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;


import com.example.mychewugou.R;
import com.example.mychewugou.adapter.MyDingDanAdapter;
import com.example.mychewugou.bean.MyDataDingDanBean;
import com.example.mychewugou.presenter.Presenterdingdanq;
import com.example.mychewugou.util.ApiUtil;
import com.example.mychewugou.view.Maindingdan;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadmoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;


import java.util.ArrayList;
import java.util.List;


public class Frag_Daizhi extends Fragment implements Maindingdan {


    private List<MyDataDingDanBean.DataBean> list = new ArrayList<>();
    private View view;
    private RecyclerView recycler_daizhi;
    private Presenterdingdanq presenter;
    private RelativeLayout relative_bar;
    private SmartRefreshLayout smart_refresh;
    private int page=0;
    private MyDingDanAdapter adapter;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.frag_daizhi, container, false);
        return view;
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        recycler_daizhi = view.findViewById(R.id.recycler_daizhi);
        relative_bar = view.findViewById(R.id.relative_bar);
        smart_refresh = view.findViewById(R.id.smart_refresh);
        presenter = new Presenterdingdanq(this);




    }


    @Override
    public void onResume() {
        super.onResume();
        relative_bar.setVisibility(View.VISIBLE);


        presenter.getDingUrl(ApiUtil.dingdan,page);
    }


    @Override
    public void getDingDanBean(final MyDataDingDanBean myDingDanBean) {
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (myDingDanBean!=null){
                    list.addAll(myDingDanBean.getData());
                    myAdapter();
                    relative_bar.setVisibility(View.GONE);
                    smart_refresh.setOnRefreshListener(new OnRefreshListener() {
                        @Override
                        public void onRefresh(RefreshLayout refreshlayout) {
                            list.clear();
                            list.addAll(0,myDingDanBean.getData());
                            myAdapter();
                            smart_refresh.finishRefresh();
                        }
                    });
                    smart_refresh.setOnLoadmoreListener(new OnLoadmoreListener() {
                        @Override
                        public void onLoadmore(RefreshLayout refreshlayout) {
                            list.clear();
                            page++;
                            presenter.getDingUrl(ApiUtil.dingdan,page);
                            onResume();
                            list.addAll(myDingDanBean.getData());
                            myAdapter();
                            smart_refresh.finishLoadmore();
                        }
                    });


                }
            }
        });
    }
    public void myAdapter(){
        if (adapter==null){
            recycler_daizhi.setLayoutManager(new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false));
            adapter = new MyDingDanAdapter(getActivity(), list,presenter,page);
            recycler_daizhi.setAdapter(adapter);
        }else {
            adapter.notifyDataSetChanged();
        }
    }
}

这是已支付Fragment


package com.example.mychewugou.fragment;


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


import com.example.mychewugou.R;




public class Frag_YiZhi extends Fragment {


    private View view;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.frag_yizhi, container, false);
        return view;
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);


    }
}


这是已取消Fragment

package com.example.mychewugou.fragment;


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


import com.example.mychewugou.R;




public class Frag_YiQu extends Fragment {


    private View view;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.frag_yiqu, container, false);
        return view;
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);


    }
}


这是订单的Holder

package com.example.mychewugou.holder;


import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;


import com.example.mychewugou.R;




public class MyDingDanHolder extends RecyclerView.ViewHolder {


    public TextView text_title;
    public TextView text_daizhifu;
    public TextView text_price;
    public TextView text_tame;
    public TextView text_btn;


    public MyDingDanHolder(View itemView) {
        super(itemView);
        text_title = itemView.findViewById(R.id.text_title);
        text_daizhifu = itemView.findViewById(R.id.text_daizhifu);
        text_price = itemView.findViewById(R.id.text_price);
        text_tame = itemView.findViewById(R.id.text_tame);
        text_btn = itemView.findViewById(R.id.text_btn);


    }
}

订单的MOLDE层

package com.example.mychewugou.model;




import com.example.mychewugou.bean.MyDataDingDanBean;
import com.example.mychewugou.presenter.Presenterdingdanq;
import com.example.mychewugou.util.OkHttp3Util;
import com.google.gson.Gson;


import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;


public class DingdanModel {
    private Presenterdingdanq presenter;


    public DingdanModel(Presenterdingdanq presenter) {


        this.presenter = presenter;
    }


    public void getDingUrl(String dingdan, int page) {
        Map<String, String> params=new HashMap<>();
        params.put("uid","2809");
        params.put("page",page+"");
        OkHttp3Util.doPost(dingdan, params, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {


            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()){
                    String json = response.body().string();
                    MyDataDingDanBean myDingDanBean = new Gson().fromJson(json, MyDataDingDanBean.class);
                    presenter.getDingDanBean(myDingDanBean);


                }
            }
        });
    }
}

购物车的Model

package com.example.mychewugou.model;


import com.example.mychewugou.bean.CartBean;
import com.example.mychewugou.presenter.CartPresenter;
import com.example.mychewugou.presenter.CartPresenter_I;
import com.example.mychewugou.util.CommonUtils;
import com.example.mychewugou.util.OkHttp3Util;
import com.google.gson.Gson;


import java.io.IOException;


import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;


/**
 * Created by hasee on 2018/1/15.
 */


public class CartModel {
    private  CartPresenter_I cartPresenter_i;


    public CartModel(CartPresenter cartPresenter_i) {
        this.cartPresenter_i=cartPresenter_i;
    }


    public void getData(String cartUrl) {
        OkHttp3Util.doGet(cartUrl, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()){
                    final String json = response.body().string();
                    CommonUtils.runOnUIThread(new Runnable() {
                        @Override
                        public void run() {
                            Gson gson = new Gson();
                            CartBean cartBean = gson.fromJson(json, CartBean.class);
                            cartPresenter_i.getSuccessCartJson(cartBean);


                        }
                    });
                }
            }
        });
    }
}


购物车的中间者

package com.example.mychewugou.presenter;


import com.example.mychewugou.bean.CartBean;
import com.example.mychewugou.model.CartModel;
import com.example.mychewugou.view.CartMainView;
import com.example.mychewugou.view.MainActivity;


/**
 * Created by hasee on 2018/1/15.
 */


public class CartPresenter implements CartPresenter_I{


    private  CartModel cartModel;
    private  CartMainView cacartMainView;


    public CartPresenter(MainActivity cartMainView) {
        this.cacartMainView = cartMainView;
        cartModel = new CartModel(this);
    }


    public void getData(String cartUrl) {
        cartModel.getData(cartUrl);
    }


    @Override
    public void getSuccessCartJson(CartBean cartBean) {
        cacartMainView.getSuccessCartJson(cartBean);
    }
}


购物车中间者的接口

package com.example.mychewugou.presenter;


import com.example.mychewugou.bean.CartBean;


/**
 * Created by hasee on 2018/1/15.
 */


public interface CartPresenter_I {
    void getSuccessCartJson(CartBean cartBean);
}


订单的中间者

package com.example.mychewugou.presenter;




import com.example.mychewugou.bean.MyDataDingDanBean;
import com.example.mychewugou.fragment.Frag_Daizhi;
import com.example.mychewugou.model.DingdanModel;
import com.example.mychewugou.view.Maindingdan;


public class Presenterdingdanq implements PresenterPortdingdan {




    private Maindingdan main;
    private final DingdanModel model;


    public Presenterdingdanq(Frag_Daizhi main) {
        model = new DingdanModel(this);
        this.main = main;
    }


    @Override
    public void getDingDanBean(MyDataDingDanBean myDingDanBean) {
        main.getDingDanBean(myDingDanBean);
    }


    public void getDingUrl(String dingdan, int page) {
        model.getDingUrl(dingdan,page);
    }
}


订单的中间者接口


package com.example.mychewugou.presenter;




import com.example.mychewugou.bean.MyDataDingDanBean;


public interface PresenterPortdingdan {
    void getDingDanBean(MyDataDingDanBean myDingDanBean);
}


API工具类

package com.example.mychewugou.util;


/**
 * Created by Dash on 2017/12/6.
 */
public class ApiUtil {
    public static final String cartUrl = "https://www.zhaoapi.cn/product/getCarts?uid=2809";




    public static final String addCartUrl = "https://www.zhaoapi.cn/product/addCart";//uid,pid
    public static final String deleteCartUrl = "https://www.zhaoapi.cn/product/deleteCart";//uid,pid


    //?uid=71&sellerid=1&pid=1&selected=0&num=10
    public static final String updateCartUrl = "https://www.zhaoapi.cn/product/updateCarts";




    public static final String createCartUrl = "https://www.zhaoapi.cn/product/createOrder";


    public static String dingdan="https://www.zhaoapi.cn/product/getOrders";
    //uid 用户id字段 String类型 必传
    //orderId 订单id参数 String类型 必传
    //status  订单状态 String类型 必传


    public static String genxin="https://www.zhaoapi.cn/product/updateOrder";


}



CommonUtils这个工具类

package com.example.mychewugou.util;


/**
 * Created by Dash
 */
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.view.View;


import com.example.mychewugou.application.EApplication;




/**
 * Created by Dash
 */
public class CommonUtils {
    public static final String TAG = "Dash";//sp文件的xml名称
    private static SharedPreferences sharedPreferences;


    /**
     * DashApplication.getAppContext()可以使用,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用
     * @param layoutId
     * @return
     */
    public static View inflate(int layoutId) {
        View view = View.inflate(EApplication.getAppContext(), layoutId, null);
        return view;
    }


    /**
     * dip---px
     *
     * @param dip 设备独立像素device independent px....1dp = 3px 1dp = 2px 1dp = 1.5px
     * @return
     */
    public static int dip2px(int dip) {
        //获取像素密度
        float density = EApplication.getAppContext().getResources().getDisplayMetrics().density;
        //
        int px = (int) (dip * density + 0.5f);//100.6
        return px;


    }


    /**
     * px-dip
     *
     * @param px
     * @return
     */
    public static int px2dip(int px) {
        //获取像素密度
        float density = EApplication.getAppContext().getResources().getDisplayMetrics().density;
        //
        int dip = (int) (px / density + 0.5f);
        return dip;


    }


    /**
     * 获取资源中的字符串
     * @param stringId
     * @return
     */
    public static String getString(int stringId) {
        return EApplication.getAppContext().getResources().getString(stringId);
    }


    public static Drawable getDrawable(int did) {
        return EApplication.getAppContext().getResources().getDrawable(did);
    }


    public static int getDimens(int id) {
        return EApplication.getAppContext().getResources().getDimensionPixelSize(id);
    }


    /**
     * sp存入字符串类型的值
     * @param flag
     * @param str
     */
    public static void saveSp(String flag, String str) {
        if (sharedPreferences == null) {
            sharedPreferences = EApplication.getAppContext().getSharedPreferences(TAG, EApplication.getAppContext().MODE_PRIVATE);
        }
        SharedPreferences.Editor edit = sharedPreferences.edit();
        edit.putString(flag, str);
        edit.commit();
    }


    public static String getSp(String flag) {
        if (sharedPreferences == null) {
            sharedPreferences = EApplication.getAppContext().getSharedPreferences(TAG, EApplication.getAppContext().MODE_PRIVATE);
        }
        return sharedPreferences.getString(flag, "");
    }


    public static boolean getBoolean(String tag) {
        if (sharedPreferences == null) {
            sharedPreferences = EApplication.getAppContext().getSharedPreferences(TAG, EApplication.getAppContext().MODE_PRIVATE);
        }
        return sharedPreferences.getBoolean(tag, false);
    }


    public static void putBoolean(String tag, boolean content) {
        if (sharedPreferences == null) {
            sharedPreferences = EApplication.getAppContext().getSharedPreferences(TAG, EApplication.getAppContext().MODE_PRIVATE);
        }
        SharedPreferences.Editor edit = sharedPreferences.edit();
        edit.putBoolean(tag, content);
        edit.commit();
    }


    /**
     * 清除sp数据
     * @param tag
     */
    public static void clearSp(String tag) {
        if (sharedPreferences == null) {
            sharedPreferences = EApplication.getAppContext().getSharedPreferences(TAG, EApplication.getAppContext().MODE_PRIVATE);
        }
        SharedPreferences.Editor edit = sharedPreferences.edit();
        edit.remove(tag);
        edit.commit();
    }


    /**
     * 自己写的运行在主线程的方法
     * 如果是主线程,执行任务,否则使用handler发送到主线程中去执行
     *
     *
     * @param runable
     */
    public static void runOnUIThread(Runnable runable) {
        //先判断当前属于子线程还是主线程
        if (android.os.Process.myTid() == EApplication.getMainThreadId()) {
            runable.run();
        } else {
            //子线程
            EApplication.getAppHanler().post(runable);
        }
    }
}


图片的工具类

package com.example.mychewugou.util;


import android.content.Context;
import android.widget.ImageView;


import com.bumptech.glide.Glide;
import com.youth.banner.loader.ImageLoader;
import com.youth.banner.loader.ImageLoaderInterface;


/**
 * Created by hasee on 2018/1/16.
 */


public class GlideImageLoader extends ImageLoader{
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        Glide.with(context).load(path).into(imageView);
    }
}



OK3工具类

package com.example.mychewugou.util;


import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;


import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;


/**
 * Created by Dash on 2017/12/8.
 */
public class OkHttp3Util {


    /**
     * 懒汉 安全 加同步
     * 私有的静态成员变量 只声明不创建
     * 私有的构造方法
     * 提供返回实例的静态方法
     */
    private static OkHttpClient okHttpClient = null;




    private OkHttp3Util() {
    }


    public static OkHttpClient getInstance() {
        if (okHttpClient == null) {
            //加同步安全
            synchronized (OkHttp3Util.class) {
                if (okHttpClient == null) {
                    //okhttp可以缓存数据....指定缓存路径
                    File sdcache = new File(Environment.getExternalStorageDirectory(), "cache");
                    //指定缓存大小
                    int cacheSize = 10 * 1024 * 1024;


                    okHttpClient = new OkHttpClient.Builder()//构建器
                            .connectTimeout(15, TimeUnit.SECONDS)//连接超时
                            .writeTimeout(20, TimeUnit.SECONDS)//写入超时
                            .readTimeout(20, TimeUnit.SECONDS)//读取超时


                            //.addInterceptor(new CommonParamsInterceptor())//添加的是应用拦截器...公共参数
                            //.addNetworkInterceptor(new CacheInterceptor())//添加的网络拦截器


                            .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize))//设置缓存
                            .build();
                }
            }


        }


        return okHttpClient;
    }


    /**
     * get请求
     * 参数1 url
     * 参数2 回调Callback
     */


    public static void doGet(String oldUrl, Callback callback) {


        //要添加的公共参数...map
        Map<String,String> map = new HashMap<>();
        map.put("source","android");


        StringBuilder stringBuilder = new StringBuilder();//创建一个stringBuilder


        stringBuilder.append(oldUrl);


        if (oldUrl.contains("?")){
            //?在最后面....2类型
            if (oldUrl.indexOf("?") == oldUrl.length()-1){


            }else {
                //3类型...拼接上&
                stringBuilder.append("&");
            }
        }else {
            //不包含? 属于1类型,,,先拼接上?号
            stringBuilder.append("?");
        }


        //添加公共参数....
        for (Map.Entry<String,String> entry: map.entrySet()) {
            //拼接
            stringBuilder.append(entry.getKey())
                    .append("=")
                    .append(entry.getValue())
                    .append("&");
        }


        //删掉最后一个&符号
        if (stringBuilder.indexOf("&") != -1){
            stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&"));
        }


        String newUrl = stringBuilder.toString();//新的路径




        //创建OkHttpClient请求对象
        OkHttpClient okHttpClient = getInstance();
        //创建Request
        Request request = new Request.Builder().url(newUrl).build();
        //得到Call对象
        Call call = okHttpClient.newCall(request);
        //执行异步请求
        call.enqueue(callback);




    }


    /**
     * post请求
     * 参数1 url
     * 参数2 Map<String, String> params post请求的时候给服务器传的数据
     *      add..("","")
     *      add()
     */


    public static void doPost(String url, Map<String, String> params, Callback callback) {
        //要添加的公共参数...map
        Map<String,String> map = new HashMap<>();
        map.put("source","android");




        //创建OkHttpClient请求对象
        OkHttpClient okHttpClient = getInstance();
        //3.x版本post请求换成FormBody 封装键值对参数


        FormBody.Builder builder = new FormBody.Builder();
        //遍历集合
        for (String key : params.keySet()) {
            builder.add(key, params.get(key));


        }


        //添加公共参数
        for (Map.Entry<String,String> entry: map.entrySet()) {
            builder.add(entry.getKey(),entry.getValue());
        }


        //创建Request
        Request request = new Request.Builder().url(url).post(builder.build()).build();


        Call call = okHttpClient.newCall(request);
        call.enqueue(callback);


    }


    /**
     * post请求上传文件....包括图片....流的形式传任意文件...
     * 参数1 url
     * file表示上传的文件
     * fileName....文件的名字,,例如aaa.jpg
     * params ....传递除了file文件 其他的参数放到map集合
     *
     */
    public static void uploadFile(String url, File file, String fileName,Map<String,String> params) {
        //创建OkHttpClient请求对象
        OkHttpClient okHttpClient = getInstance();


        MultipartBody.Builder builder = new MultipartBody.Builder();
        builder.setType(MultipartBody.FORM);


        //参数
        if (params != null){
            for (String key : params.keySet()){
                builder.addFormDataPart(key,params.get(key));
            }
        }
        //文件...参数name指的是请求路径中所接受的参数...如果路径接收参数键值是fileeeee,此处应该改变
        builder.addFormDataPart("file",fileName,RequestBody.create(MediaType.parse("application/octet-stream"),file));


        //构建
        MultipartBody multipartBody = builder.build();


        //创建Request
        Request request = new Request.Builder().url(url).post(multipartBody).build();


        //得到Call
        Call call = okHttpClient.newCall(request);
        //执行请求
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("upload",e.getLocalizedMessage());
            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //上传成功回调 目前不需要处理
                if (response.isSuccessful()){
                    String s = response.body().string();
                    Log.e("upload","上传--"+s);
                }
            }
        });


    }


    /**
     * Post请求发送JSON数据....{"name":"zhangsan","pwd":"123456"}
     * 参数一:请求Url
     * 参数二:请求的JSON
     * 参数三:请求回调
     */
    public static void doPostJson(String url, String jsonParams, Callback callback) {
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonParams);
        Request request = new Request.Builder().url(url).post(requestBody).build();
        Call call = getInstance().newCall(request);
        call.enqueue(callback);


    }


    /**
     * 下载文件 以流的形式把apk写入的指定文件 得到file后进行安装
     * 参数er:请求Url
     * 参数san:保存文件的文件夹....download
     */
    public static void download(final Activity context, final String url, final String saveDir) {
        Request request = new Request.Builder().url(url).build();
        Call call = getInstance().newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //com.orhanobut.logger.Logger.e(e.getLocalizedMessage());
            }


            @Override
            public void onResponse(Call call, final Response response) throws IOException {


                InputStream is = null;
                byte[] buf = new byte[2048];
                int len = 0;
                FileOutputStream fos = null;
                try {
                    is = response.body().byteStream();//以字节流的形式拿回响应实体内容
                    //apk保存路径
                    final String fileDir = isExistDir(saveDir);
                    //文件
                    File file = new File(fileDir, getNameFromUrl(url));


                    fos = new FileOutputStream(file);
                    while ((len = is.read(buf)) != -1) {
                        fos.write(buf, 0, len);
                    }


                    fos.flush();


                    context.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(context, "下载成功:" + fileDir + "," + getNameFromUrl(url), Toast.LENGTH_SHORT).show();
                        }
                    });


                    //apk下载完成后 调用系统的安装方法
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
                    context.startActivity(intent);




                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (is != null) is.close();
                    if (fos != null) fos.close();




                }
            }
        });


    }


    /**
     * 判断下载目录是否存在......并返回绝对路径
     *
     * @param saveDir
     * @return
     * @throws IOException
     */
    public static String isExistDir(String saveDir) throws IOException {
        // 下载位置
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {


            File downloadFile = new File(Environment.getExternalStorageDirectory(), saveDir);
            if (!downloadFile.mkdirs()) {
                downloadFile.createNewFile();
            }
            String savePath = downloadFile.getAbsolutePath();
            Log.e("savePath", savePath);
            return savePath;
        }
        return null;
    }


    /**
     * @param url
     * @return 从下载连接中解析出文件名
     */
    private static String getNameFromUrl(String url) {
        return url.substring(url.lastIndexOf("/") + 1);
    }


    /**
     * 公共参数拦截器
     */
    private static class CommonParamsInterceptor implements Interceptor{


        //拦截的方法
        @Override
        public Response intercept(Chain chain) throws IOException {


            //获取到请求
            Request request = chain.request();
            //获取请求的方式
            String method = request.method();
            //获取请求的路径
            String oldUrl = request.url().toString();


            Log.e("---拦截器",request.url()+"---"+request.method()+"--"+request.header("User-agent"));


            //要添加的公共参数...map
            Map<String,String> map = new HashMap<>();
            map.put("source","android");


            if ("GET".equals(method)){
                // 1.http://www.baoidu.com/login                --------? key=value&key=value
                // 2.http://www.baoidu.com/login?               --------- key=value&key=value
                // 3.http://www.baoidu.com/login?mobile=11111    -----&key=value&key=value


                StringBuilder stringBuilder = new StringBuilder();//创建一个stringBuilder


                stringBuilder.append(oldUrl);


                if (oldUrl.contains("?")){
                    //?在最后面....2类型
                    if (oldUrl.indexOf("?") == oldUrl.length()-1){


                    }else {
                        //3类型...拼接上&
                        stringBuilder.append("&");
                    }
                }else {
                    //不包含? 属于1类型,,,先拼接上?号
                    stringBuilder.append("?");
                }


               //添加公共参数....
                for (Map.Entry<String,String> entry: map.entrySet()) {
                    //拼接
                    stringBuilder.append(entry.getKey())
                            .append("=")
                            .append(entry.getValue())
                            .append("&");
                }


                //删掉最后一个&符号
                if (stringBuilder.indexOf("&") != -1){
                    stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&"));
                }


                String newUrl = stringBuilder.toString();//新的路径


                //拿着新的路径重新构建请求
                request = request.newBuilder()
                        .url(newUrl)
                        .build();




            }else if ("POST".equals(method)){
                //先获取到老的请求的实体内容
                RequestBody oldRequestBody = request.body();//....之前的请求参数,,,需要放到新的请求实体内容中去


                //如果请求调用的是上面doPost方法
                if (oldRequestBody instanceof FormBody){
                    FormBody oldBody = (FormBody) oldRequestBody;


                    //构建一个新的请求实体内容
                    FormBody.Builder builder = new FormBody.Builder();
                    //1.添加老的参数
                    for (int i=0;i<oldBody.size();i++){
                        builder.add(oldBody.name(i),oldBody.value(i));
                    }
                    //2.添加公共参数
                    for (Map.Entry<String,String> entry:map.entrySet()) {


                        builder.add(entry.getKey(),entry.getValue());
                    }


                    FormBody newBody = builder.build();//新的请求实体内容


                    //构建一个新的请求
                    request = request.newBuilder()
                            .url(oldUrl)
                            .post(newBody)
                            .build();
                }




            }




            Response response = chain.proceed(request);


            return response;
        }
    }


    /**
     * 网络缓存的拦截器......注意在这里更改cache-control头是很危险的,一般客户端不进行更改,,,,服务器端直接指定
     *
     * 没网络取缓存的时候,一般都是在数据库或者sharedPerfernce中取出来的
     *
     *
     *
     */
    /*private static class CacheInterceptor implements Interceptor{


        @Override
        public Response intercept(Chain chain) throws IOException {
            //老的响应
            Response oldResponse = chain.proceed(chain.request());


            *//*if (NetUtils.isNetworkConnected(DashApplication.getAppContext())){
                int maxAge = 120; // 在线缓存在2分钟内可读取


                return oldResponse.newBuilder()
                        .removeHeader("Pragma")
                        .removeHeader("Cache-Control")
                        .header("Cache-Control", "public, max-age=" + maxAge)
                        .build();
            }else {
                int maxStale = 60 * 60 * 24 * 14; // 离线时缓存保存2周
                return oldResponse.newBuilder()
                        .removeHeader("Pragma")
                        .removeHeader("Cache-Control")
                        .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
                        .build();
            }*//*


        }
    }*/
}


购物车的自定义二级列表

package com.example.mychewugou.view;


import android.content.Context;
import android.util.AttributeSet;
import android.widget.ExpandableListView;


/**
 * Created by hasee on 2018/1/15.
 */


public class CartExpanableListview extends ExpandableListView {
    public CartExpanableListview(Context context) {
        super(context);
    }


    public CartExpanableListview(Context context, AttributeSet attrs) {
        super(context, attrs);
    }


    public CartExpanableListview(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

购物车的接口

package com.example.mychewugou.view;


import com.example.mychewugou.bean.CartBean;


/**
 * Created by hasee on 2018/1/15.
 */


public interface CartMainView {
    void getSuccessCartJson(CartBean cartBean);
}


订单的Activity


package com.example.mychewugou.view;


import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextView;


import com.example.mychewugou.R;
import com.example.mychewugou.fragment.Frag_Daizhi;
import com.example.mychewugou.fragment.Frag_YiQu;
import com.example.mychewugou.fragment.Frag_YiZhi;


public class DingDanActivity extends AppCompatActivity implements View.OnClickListener {




    private ImageView image_btn;
    private TextView text_daizhi;
    private TextView text_yizhi;
    private TextView text_yiqu;
    private FrameLayout frame_layout;
    private View item_popup;
    private View view;
    private PopupWindow popupWindow;
    private TextView btn_daizhi;
    private TextView btn_yizhi;
    private TextView btn_yiqu;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ding_dan);


        image_btn = findViewById(R.id.image_btn);
        text_daizhi = findViewById(R.id.text_daizhi);
        text_yizhi = findViewById(R.id.text_yizhi);
        text_yiqu = findViewById(R.id.text_yiqu);
        frame_layout = findViewById(R.id.frame_layout);


        text_daizhi.setOnClickListener(this);
        text_yizhi.setOnClickListener(this);
        text_yiqu.setOnClickListener(this);


        Frag_Daizhi frag_daizhi = new Frag_Daizhi();
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.frame_layout,frag_daizhi).commit();


        item_popup = View.inflate(this, R.layout.item_popup, null);
        view = View.inflate(this, R.layout.activity_ding_dan, null);
        popupWindow = new PopupWindow(item_popup
                , ActionBar.LayoutParams.WRAP_CONTENT,ActionBar.LayoutParams.WRAP_CONTENT);
        popupWindow.setTouchable(true);


        btn_daizhi = item_popup.findViewById(R.id.btn_daizhi);
        btn_yizhi = item_popup.findViewById(R.id.btn_yizhi);
        btn_yiqu = item_popup.findViewById(R.id.btn_yiqu);
        btn_daizhi.setOnClickListener(this);
        btn_yizhi.setOnClickListener(this);
        btn_yiqu.setOnClickListener(this);


        image_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //popupWindow.showAtLocation(view, Gravity.BOTTOM,0,0);
                popupWindow.showAsDropDown(image_btn);
            }
        });




    }


    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.text_daizhi:
                Frag_Daizhi frag_daizhi = new Frag_Daizhi();
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.frame_layout,frag_daizhi).commit();
                break;
            case R.id.text_yizhi:
                Frag_YiZhi frag_yiZhi = new Frag_YiZhi();
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.frame_layout,frag_yiZhi).commit();
                break;
            case R.id.text_yiqu:
                Frag_YiQu frag_yiQu = new Frag_YiQu();
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.frame_layout,frag_yiQu).commit();
                break;




            case R.id.btn_daizhi:
                Frag_Daizhi frag_daizhi2 = new Frag_Daizhi();
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.frame_layout,frag_daizhi2).commit();
                popupWindow.dismiss();
                break;
            case R.id.btn_yizhi:
                Frag_YiZhi frag_yiZhi2 = new Frag_YiZhi();
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.frame_layout,frag_yiZhi2).commit();
                popupWindow.dismiss();
                break;
            case R.id.btn_yiqu:
                Frag_YiQu frag_yiQu2 = new Frag_YiQu();
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.frame_layout,frag_yiQu2).commit();
                popupWindow.dismiss();
                break;
        }
    }
}


主页面的Activity


package com.example.mychewugou.view;


import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;


import com.example.mychewugou.R;
import com.example.mychewugou.adapter.MyAdapter;
import com.example.mychewugou.bean.CartBean;
import com.example.mychewugou.bean.CountPriceBean;
import com.example.mychewugou.presenter.CartPresenter;
import com.example.mychewugou.util.ApiUtil;


public class MainActivity extends AppCompatActivity implements View.OnClickListener,CartMainView {






    private CartExpanableListview expanableListview;
    private CheckBox check_all;
    private TextView text_total;
    private TextView text_buy;
    private RelativeLayout relative_progress;
    private LinearLayout linear_bottom;
    private CartPresenter cartPresenter;
    private CartBean cartBean;
    private MyAdapter myAdapter;




    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0){
                CountPriceBean countPriceBean = (CountPriceBean) msg.obj;
                text_total.setText("合计:¥"+countPriceBean.getPriceString());
                text_buy.setText("去结算("+countPriceBean.getCount()+")");
            }
        }
    };




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        check_all = findViewById(R.id.check_all);
        text_total = findViewById(R.id.text_total);
        text_buy = findViewById(R.id.text_buy);
        expanableListview = findViewById(R.id.expanable_listview);
        relative_progress = findViewById(R.id.relative_progress);
        linear_bottom = findViewById(R.id.linear_layout);






        //去掉默认的指示器
        expanableListview.setGroupIndicator(null);


        check_all.setOnClickListener(this);
        text_buy.setOnClickListener(this);


        cartPresenter = new CartPresenter(this);


    }


    @Override
    protected void onResume() {
        super.onResume();
        relative_progress.setVisibility(View.VISIBLE);
        // 请求数据
        cartPresenter.getData(ApiUtil.cartUrl);
    }


    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.check_all:
                myAdapter.setAllChildState(check_all.isChecked());


                break;
            case R.id.text_buy://去结算...试一下创建订单
                Intent intent = new Intent(MainActivity.this,DingDanActivity.class);
                startActivity(intent);


                break;
        }
    }


    @Override
    public void getSuccessCartJson(CartBean cartBean) {
        relative_progress.setVisibility(View.GONE);
        this.cartBean = cartBean;
        if (cartBean!=null){
            linear_bottom.setVisibility(View.VISIBLE);


            for (int i = 0;i<cartBean.getData().size();i++){
                if (isAllChildInGroupSelected(i)){
                    cartBean.getData().get(i).setGroupChecked(true);
                }
            }


            check_all.setChecked(isAllGroupChecked());


            //设置适配器
            myAdapter = new MyAdapter(MainActivity.this, cartBean,handler,cartPresenter,relative_progress);
            expanableListview.setAdapter(myAdapter);


            //展开
            for (int i= 0;i<cartBean.getData().size();i++){
                expanableListview.expandGroup(i);
            }


            //3.根据子条目是否选中  初始化价格和数量
            myAdapter.sendPriceAndCount();






        }else {
            //隐藏下面的全选.... 等
            linear_bottom.setVisibility(View.GONE);
            //显示去逛逛,,,添加购物车
            Toast.makeText(MainActivity.this,"购物车为空,去逛逛",Toast.LENGTH_SHORT).show();


        }
    }


    private boolean isAllGroupChecked() {
        for (int i =0;i<cartBean.getData().size();i++){
            if (! cartBean.getData().get(i).isGroupChecked()){//代表一级列表有没选中的
                return false;
            }
        }


        return true;
    }


    private boolean isAllChildInGroupSelected(int groupPosition) {
        for (int i=0;i<cartBean.getData().get(groupPosition).getList().size();i++){


            if (cartBean.getData().get(groupPosition).getList().get(i).getSelected() ==0){
                return false;
            }
        }
        return true;
    }
}


订单的接口

package com.example.mychewugou.view;




import com.example.mychewugou.bean.MyDataDingDanBean;


public interface Maindingdan {
    void getDingDanBean(MyDataDingDanBean myDingDanBean);
}



欢迎页面


package com.example.mychewugou.view;


import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;


import com.example.mychewugou.R;


public class WelcomActivity extends AppCompatActivity {


    private ImageView imageView;
   /* Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Intent intent=new Intent(WelcomActivity.this,XiangQingActivity.class);
            startActivity(intent);
            finish();
        }
    };*/




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcom);


        imageView = findViewById(R.id.image_view);


        ObjectAnimator y = ObjectAnimator.ofFloat(imageView, "Y", 0, 500, 800, 1000);


        ObjectAnimator alpha = ObjectAnimator.ofFloat(imageView, "alpha", 0.5f, 1);


        ObjectAnimator rotationX = ObjectAnimator.ofFloat(imageView, "rotationX", 0,90,180,270, 360);
        ObjectAnimator rotationY = ObjectAnimator.ofFloat(imageView, "rotationY", 0,90,180,270, 360);


        ObjectAnimator scaleX = ObjectAnimator.ofFloat(imageView, "scaleX", 0.5f, 2);
        ObjectAnimator scaleY = ObjectAnimator.ofFloat(imageView, "scaleY", 0.5f, 2);


        //组合
        AnimatorSet animatorSet = new AnimatorSet();


        //放到一起
     //   animatorSet.play(y).with(alpha).with(scaleX).with(scaleY).with(rotationX);
        animatorSet.play(y).with(alpha).with(rotationX).with(rotationY).with(scaleX).with(scaleY);


        animatorSet.setDuration(3000);
        animatorSet.start();


        animatorSet.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animator) {


            }


            @Override
            public void onAnimationEnd(Animator animator) {
                //动画结束跳转页面
                Intent intent=new Intent(WelcomActivity.this,XiangQingActivity.class);
                startActivity(intent);
                finish();


            }


            @Override
            public void onAnimationCancel(Animator animator) {


            }


            @Override
            public void onAnimationRepeat(Animator animator) {


            }
        });


    }
}

详情页面


package com.example.mychewugou.view;


import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;


import com.example.mychewugou.R;
import com.example.mychewugou.bean.AddBean;
import com.example.mychewugou.bean.GoodsBean;
import com.example.mychewugou.util.GlideImageLoader;
import com.example.mychewugou.util.OkHttp3Util;
import com.google.gson.Gson;
import com.youth.banner.Banner;


import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;


public class XiangQingActivity extends AppCompatActivity {


    private Banner xq_banner;
    private TextView xq_title,xq_price01,xq_price02;
    private List<String> list = new ArrayList<>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xiang_qing);
        xq_banner = findViewById(R.id.xq_banner);
        xq_title = findViewById(R.id.xq_title);
        xq_price01 = findViewById(R.id.xq_price01);
        xq_price02 = findViewById(R.id.xq_price02);


        OkHttp3Util.doGet("https://www.zhaoapi.cn/product/getProductDetail?pid=15", new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()){
                    final String json = response.body().string();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Gson gson = new Gson();
                            GoodsBean goodsBean = gson.fromJson(json, GoodsBean.class);
                            String title = goodsBean.getData().getTitle();
                            double bargainPrice = goodsBean.getData().getBargainPrice();
                            double price = goodsBean.getData().getPrice();
                            String images = goodsBean.getData().getImages();
                            String[] split = images.split("\\|");
                            for (String str :split){
                                list.add(str);
                            }
                            //xq_banner.setBannerStyle(Banner.AUTOFILL_TYPE_LIST);//设置图片的样式
                            xq_banner.setImageLoader(new GlideImageLoader());
                            xq_banner.setImages(list);
                            xq_banner.isAutoPlay(false);
                            xq_banner.start();
                            xq_title.setText(title);
                            xq_price01.setText("原价:¥"+price+"");
                            xq_price02.setText("优惠价:¥"+bargainPrice+"");
                        }
                    });
                }
            }
        });
    }


    public void addCart(View view) {
        OkHttp3Util.doGet("https://www.zhaoapi.cn/product/addCart?pid=15&uid=2809", new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {


            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()){
                    final String string = response.body().string();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Gson gson =   new Gson();
                            AddBean addBean = gson.fromJson(string, AddBean.class);
                            Toast.makeText(XiangQingActivity.this,"状态:"+addBean.getMsg(),Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            }
        });
    }


    public void cart(View view) {
        Intent intent = new Intent(XiangQingActivity.this,MainActivity.class);
        startActivity(intent);
        finish();
    }
}


订单的布局文件


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.mychewugou.view.DingDanActivity">
    <RelativeLayout
        android:background="#fff"
        android:layout_width="match_parent"
        android:layout_height="50dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:textSize="20sp"
            android:text="订单列表"/>
        <ImageView
            android:id="@+id/image_btn"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:clickable="true"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="20dp"
            android:background="@drawable/lv_icon"/>
    </RelativeLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"


        android:orientation="horizontal">
        <TextView
            android:id="@+id/text_daizhi"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_height="match_parent"
            android:textSize="16sp"
            android:background="@drawable/biankuang"
            android:text="待支付"/>
        <TextView
            android:id="@+id/text_yizhi"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_height="match_parent"
            android:textSize="16sp"
            android:background="@drawable/biankuang"
            android:text="已支付"/>
        <TextView
            android:id="@+id/text_yiqu"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_height="match_parent"
            android:textSize="16sp"
            android:background="@drawable/biankuang"
            android:text="已取消"/>
    </LinearLayout>
    <FrameLayout
        android:id="@+id/frame_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></FrameLayout>
</LinearLayout>



购物车的布局


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.mychewugou.view.MainActivity">


    <ScrollView
        android:layout_above="@+id/linear_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">




        <LinearLayout


            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">


            <com.example.mychewugou.view.CartExpanableListview
                android:id="@+id/expanable_listview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"></com.example.mychewugou.view.CartExpanableListview>


            <LinearLayout
                android:layout_marginTop="20dp"
                android:orientation="vertical"
                android:background="#00ff00"
                android:layout_width="match_parent"
                android:layout_height="500dp">


            </LinearLayout>


        </LinearLayout>




    </ScrollView>


    <RelativeLayout
        android:visibility="gone"
        android:layout_above="@id/linear_layout"
        android:id="@+id/relative_progress"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <ProgressBar
            android:layout_centerInParent="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RelativeLayout>
    <LinearLayout
        android:id="@+id/linear_layout"
        android:layout_alignParentBottom="true"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="50dp">
        <CheckBox
            android:layout_marginLeft="10dp"
            android:id="@+id/check_all"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />


        <TextView
            android:id="@+id/text_total"
            android:text="合计:¥0.00"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="wrap_content" />


        <TextView
            android:text="去结算(0)"
            android:background="#ff0000"
            android:textColor="#ffffff"
            android:gravity="center"
            android:id="@+id/text_buy"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent" />


    </LinearLayout>
</RelativeLayout>



欢迎页面的布局


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.mychewugou.view.WelcomActivity">


    <ImageView
        android:layout_centerHorizontal="true"
        android:id="@+id/image_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher_round" />
</RelativeLayout>



详情页面的布局


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.mychewugou.view.XiangQingActivity">


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="详情界面"
            android:textSize="25sp"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"/>
    </RelativeLayout>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@mipmap/ic_launcher_round"/>


   <RelativeLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <LinearLayout
           android:layout_above="@+id/xq_linear"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:orientation="vertical">
           <com.youth.banner.Banner
               android:id="@+id/xq_banner"
               android:layout_width="match_parent"
               android:layout_height="300dp">
           </com.youth.banner.Banner>
           <TextView
               android:id="@+id/xq_title"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="title"/>
           <TextView
               android:id="@+id/xq_price01"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="price01"/>
           <TextView
               android:id="@+id/xq_price02"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="price02"/>
       </LinearLayout>
       <LinearLayout
           android:id="@+id/xq_linear"
           android:layout_width="match_parent"
           android:layout_height="50dp"
           android:orientation="horizontal"
           android:layout_alignParentBottom="true">
           <Button
               android:onClick="cart"
               android:layout_width="0dp"
               android:layout_weight="1"
               android:layout_height="match_parent"
               android:text="购物车"/>
           <Button
               android:onClick="addCart"
               android:layout_width="0dp"
               android:layout_weight="1"
               android:layout_height="match_parent"
               android:text="加入购物车"/>
       </LinearLayout>
   </RelativeLayout>


</LinearLayout>


二级列表的子布局


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:padding="10dp"
    android:layout_marginLeft="10dp"
    android:layout_height="match_parent">
    <CheckBox
        android:layout_centerVertical="true"
        android:id="@+id/check_child"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


    <ImageView
        android:id="@+id/image_good"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/check_child"
        android:layout_marginLeft="10dp"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@mipmap/ic_launcher_round"/>


    <TextView
        android:id="@+id/text_title"
        android:layout_toRightOf="@+id/image_good"
        android:layout_marginLeft="10dp"
        android:layout_alignTop="@+id/image_good"
        android:maxLines="2"
        android:minLines="2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="标题"/>


    <TextView
        android:id="@+id/text_price"
        android:layout_toRightOf="@+id/image_good"
        android:layout_marginLeft="10dp"
        android:layout_alignBottom="@+id/image_good"
        android:text="¥99.99"
        android:textColor="#ff0000"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


    <TextView
        android:id="@+id/text_delete"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/linearLayout"
        android:layout_toLeftOf="@+id/linearLayout"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="5dp"
        android:background="#ff0000"
        android:gravity="center"
        android:text="删除"
        android:textColor="#ffffff" />


    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_alignParentRight="true"
        android:layout_alignBottom="@+id/image_good"
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">


        <TextView
            android:id="@+id/text_jian"
            android:text="一"
            android:padding="5dp"
            android:background="@drawable/bian_kuang_line"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />


        <TextView
            android:gravity="center"
            android:id="@+id/text_num"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:background="@drawable/bian_kuang_line"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />


        <TextView
            android:id="@+id/text_add"
            android:text="十"
            android:padding="5dp"
            android:background="@drawable/bian_kuang_line"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />


    </LinearLayout>


</RelativeLayout>



二级列表的父布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="10dp"
    android:gravity="center_vertical">


    <CheckBox
        android:id="@+id/check_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


    <TextView
        android:layout_marginLeft="10dp"
        android:text="京东自营"
        android:id="@+id/text_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>



订单页面适配器的布局


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/text_title"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="bottom"
            android:layout_height="match_parent"
            android:text="1111"/>
        <TextView
            android:id="@+id/text_daizhifu"
            android:layout_width="50dp"
            android:gravity="bottom"
            android:layout_height="match_parent"
            android:textColor="#ff0000"
            android:text="待支付"/>
    </LinearLayout>
    <TextView
        android:id="@+id/text_price"
        android:gravity="bottom"
        android:textColor="#ff0000"
        android:layout_marginLeft="20dp"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="1111"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/text_tame"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="bottom"
            android:layout_height="match_parent"
            android:text="1111"/>
        <TextView
            android:id="@+id/text_btn"
            android:layout_width="70dp"
            android:gravity="center"
            android:layout_gravity="bottom"
            android:layout_height="30dp"
            android:background="@drawable/biankuang"
            android:text="取消订单"/>
    </LinearLayout>
    <TextView
        android:layout_marginTop="15dp"
        android:clickable="true"
        android:focusable="false"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#9999"/>


</LinearLayout>


自定义对话框的布局


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="100dp"
        android:layout_height="wrap_content"


        android:orientation="vertical">
        <TextView
            android:id="@+id/btn_daizhi"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_height="0dp"
            android:textSize="16sp"
            android:padding="15dp"
            android:background="@drawable/select_dianji"
            android:text="待支付"/>
        <TextView
            android:id="@+id/btn_yizhi"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_height="0dp"
            android:textSize="16sp"
            android:padding="15dp"
            android:background="@drawable/select_dianji"
            android:text="已支付"/>
        <TextView
            android:id="@+id/btn_yiqu"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_height="0dp"
            android:textSize="16sp"
            android:padding="15dp"
            android:background="@drawable/select_dianji"
            android:text="已取消"/>
    </LinearLayout>
</RelativeLayout>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值