购物车界面

Adapter

public class ShopAdapter extends BaseExpandableListAdapter {
    private List<Shop.DataBean> shopData;
    private double price;
    private int num;

    public ShopAdapter(List<Shop.DataBean> shopData) {
        this.shopData = shopData;
    }

    //1.有多少按钮
    @Override
    public int getGroupCount() {
        return shopData.size();
    }

    //2.一个组里有多少子条目
    @Override
    public int getChildrenCount(int groupPosition) {
        return shopData.get(groupPosition).getList().size();
    }



    @Override
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        //P1.获取组的下标
        Shop.DataBean dataBean = shopData.get(groupPosition);
        ParentHolder parentHolder;
        if (convertView == null) {
            convertView = View.inflate(parent.getContext(), R.layout.parent_item, null);
            parentHolder = new ParentHolder(convertView);
            convertView.setTag(parentHolder);
        } else {
            parentHolder = (ParentHolder) convertView.getTag();
        }
        //P2.获取商家名称
        parentHolder.textParent.setText(dataBean.getSellerName());
        return convertView;
    }

    C.子布局///
    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        Shop.DataBean dataBean = shopData.get(groupPosition);
        List<Shop.DataBean.ListBean> list = dataBean.getList();
        //C1.拿到list集合里具体商品
        Shop.DataBean.ListBean listBean = list.get(childPosition);
        ChildHolder childHolder;
        if (convertView == null) {
            convertView = View.inflate(parent.getContext(), R.layout.child_item, null);
            //   convertView = View.inflate(parent.getContext(), R.layout.child_item, null);
            childHolder = new ChildHolder(convertView);
            convertView.setTag(childHolder);
        } else {
            childHolder = (ChildHolder) convertView.getTag();
        }
//C2.截取图片picasso
        String images = listBean.getImages();
        String[] strings = images.split("!");
        Picasso.with(parent.getContext()).load(strings[0]).into(childHolder.imageChild);
        //C.获取商品名称
        childHolder.childText.setText(listBean.getTitle());
        //C.单价
        childHolder.childPrice.setText(listBean.getPrice() + "");
        //C.设置子条目复选框是否选中
        childHolder.boxChild.setChecked(listBean.getSelected() == 1);
        //C.设置加减器内部数量
        //childHolder.addSub.setNumber(listBean.getNum());

        //C3.设置商品checkbox的点击事件,接口回调
        childHolder.boxChild.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        return convertView;
    }





    public static class ParentHolder {

        private final CheckBox boxParent;
        private final TextView textParent;

        public ParentHolder(View rootView) {
            boxParent = rootView.findViewById(R.id.box_parent);
            textParent = rootView.findViewById(R.id.text_parent);
        }
    }

    public static class ChildHolder {

        private final CheckBox boxChild;
        private final ImageView imageChild;
        private final TextView childText;
        private final TextView childPrice;
        private final MyAddSub addSub;

        public ChildHolder(View rootView) {
            boxChild = rootView.findViewById(R.id.child_box);
            imageChild = rootView.findViewById(R.id.child_image);
            childText = rootView.findViewById(R.id.child_text);
            childPrice = rootView.findViewById(R.id.child_price);
            addSub = rootView.findViewById(R.id.add_sub);
        }
    }








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

    @Override
    public Object getChild(int i, int i1) {
        return null;
    }

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

    @Override
    public long getChildId(int i, int i1) {
        return 0;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }
    @Override
    public boolean isChildSelectable(int i, int i1) {
        return false;
    }
}

Presenter

public class ShopPresenter {
public void ShopData(String url) {
    DataUtils.getInstance().doGet(url, new DataUtils.OKhttpInterface() {
        @Override
        public void Failed(Exception e) {
            mOnshopInterface.failed(e);
        }

        @Override
        public void Success(String data) {
            Shop shop = new Gson().fromJson(data, Shop.class);
            List<Shop.DataBean> shopData = shop.getData();
            mOnshopInterface.success(shopData);
        }
    });
}

public interface onShopInterface {
    void failed(Exception e);

    void success(List<Shop.DataBean> shopData);
}

private onShopInterface mOnshopInterface;

public void setOnshopInterface(onShopInterface onshopInterface) {
    mOnshopInterface = onshopInterface;
}

}

Utils

	public class DataUtils {

        private final Handler handler;
        private final OkHttpClient httpClient;
        private static DataUtils mHttpUtils;

        private DataUtils(){
            //创建主线程的handler
            handler = new Handler(Looper.getMainLooper());
            httpClient = new OkHttpClient.Builder()
                    .connectTimeout(500, TimeUnit.MILLISECONDS)
                    .readTimeout(5000, TimeUnit.MILLISECONDS)
                    .writeTimeout(5000, TimeUnit.MILLISECONDS)
                    .build();
        }
        //创建接口
        public interface OKhttpInterface{
            void Failed(Exception e);
            void Success(String data);
        }
        public void doGet(String url, final OKhttpInterface mOkhttpInterface){
            Request request = new Request.Builder()
                    .get()
                    .url(url)
                    .build();
            httpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, final IOException e) {
                    if (mOkhttpInterface!=null){
                        //切换到主线程
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                mOkhttpInterface.Failed(e);
                            }
                        });
                    }
                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    if (response!=null&&response.isSuccessful()){
                        final String data = response.body().string();
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                if (mOkhttpInterface!=null){
                                    mOkhttpInterface.Success(data);
                                    return;
                                }
                            }
                        });
                    }
                }
            });
        }
        //单例模式
        public static DataUtils getInstance(){
            if (mHttpUtils==null){
                synchronized (DataUtils.class){
                    if (mHttpUtils==null){
                        return mHttpUtils=new DataUtils();
                    }
                }
            }
            return mHttpUtils;
        }
}

MainActivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private ExpandableListView ex_listView;
    private CheckBox all_box;
    private TextView all_price;
    private Button jiesuan_btn;
    private ShopAdapter shopAdapter;
    private String url = "http://www.zhaoapi.cn/product/getCarts?uid=71";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //A.获取控件
        initView();
        //B.获取数据
        initData();
    }

    private void initData() {
        ShopPresenter shopPresenter = new ShopPresenter();
        shopPresenter.ShopData(url);
        shopPresenter.setOnshopInterface(new ShopPresenter.onShopInterface(){

            @Override
            public void failed(Exception e) {

            }

            @Override
            public void success(List<Shop.DataBean> shopData) {
                //B1.获取适配器
                shopAdapter = new ShopAdapter(shopData);


                //B3.设置adapter对象
                ex_listView.setAdapter(shopAdapter);
                for (int i=0;i<shopData.size();i++){
                    ex_listView.expandGroup(i);
                }
            }
        });
    }

    private void initView() {
        ex_listView = findViewById(R.id.ex_listView);
        all_box = findViewById(R.id.all_box);
        all_price = findViewById(R.id.all_price);
        jiesuan_btn = findViewById(R.id.jiesuan_btn);
        all_box.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {

    }
}

MyAddSub

	public class MyAddSub extends LinearLayout implements View.OnClickListener {
	
	    private TextView addText;
	    private TextView subText;
	    private TextView numText;
	    private int number = 1;
	
	    public MyAddSub(Context context) {
	        this(context, null);
	    }
	
	    public MyAddSub(Context context, AttributeSet attrs) {
	        this(context, attrs, 0);
	    }
	
	    public MyAddSub(Context context, AttributeSet attrs, int defStyleAttr) {
	        super(context, attrs, defStyleAttr);
	        View view = inflate(context, R.layout.add_sub_item, this);
	        addText = view.findViewById(R.id.add_text);
	        subText = view.findViewById(R.id.sub_text);
	        numText = view.findViewById(R.id.num_text);
	
	        addText.setOnClickListener(this);
	        subText.setOnClickListener(this);
	
	    }
	
	    @Override
	    public void onClick(View v) {
	        switch (v.getId()) {
	            case R.id.add_text:
	                ++number;
	                numText.setText(number + "");
	                if (mOnNumberChangeInterface != null) {
	                    mOnNumberChangeInterface.onNumberChang(number);
	                }
	                break;
	            case R.id.sub_text:
	                //判断如果数字比1大就减,比1小就吐司
	                if (number > 1) {
	                    --number;
	                    numText.setText(number + "");
	                    if (mOnNumberChangeInterface != null) {
	                        mOnNumberChangeInterface.onNumberChang(number);
	                    }
	                } else {
	                    Toast.makeText(getContext(), "不能再少了", Toast.LENGTH_SHORT).show();
	                }
	                break;
	        }
	    }
	
	    public int getNumber() {
	        return number;
	    }
	
	    public void setNumber(int number) {
	        this.number = number;
	        numText.setText(number + "");
	    }
	
	    //创建接口
	    public interface OnNumberChangeInterface {
	        void onNumberChang(int num);
	    }
	
	    //声明接口名
	    private OnNumberChangeInterface mOnNumberChangeInterface;
	
	    //暴露方法
	    public void setOnNumberChangeInterface(OnNumberChangeInterface onNumberChangeInterface) {
	        mOnNumberChangeInterface = onNumberChangeInterface;
	    }
	}

布局

	<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=".MainActivity">
	    <ExpandableListView
	        android:id="@+id/ex_listView"
	        android:layout_width="match_parent"
	        android:layout_height="0dp"
	        android:layout_weight="10" />
	
	    <LinearLayout
	        android:layout_width="match_parent"
	        android:layout_height="0dp"
	        android:layout_weight="1"
	        android:orientation="horizontal">
	
	        <CheckBox
	            android:id="@+id/all_box"
	            android:layout_width="wrap_content"
	            android:layout_height="wrap_content"
	            android:layout_weight="1"
	            android:text="全选" />
	
	        <TextView
	            android:id="@+id/all_price"
	            android:layout_width="wrap_content"
	            android:layout_height="wrap_content"
	            android:layout_weight="1"
	            android:text="总价:¥0.00"
	            android:textSize="18sp" />
	
	        <Button
	            android:id="@+id/jiesuan_btn"
	            android:layout_width="wrap_content"
	            android:layout_height="wrap_content"
	            android:layout_weight="1"
	            android:text="结算" />
	    </LinearLayout>
	
	</LinearLayout>

z主

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="80dp"
    android:layout_height="40dp"
    android:orientation="horizontal">

<TextView
    android:id="@+id/sub_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="-"
    android:textSize="20sp" />

<TextView
    android:id="@+id/num_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="1"
    android:textSize="20sp" />

<TextView
    android:id="@+id/add_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="+"
    android:textSize="20sp" />

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="120dp">

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <CheckBox
        android:id="@+id/child_box"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical" />

    <ImageView
        android:id="@+id/child_image"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:padding="10dp"
        android:src="@mipmap/ic_launcher" />


</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical">

    <TextView
        android:id="@+id/child_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="15dp"
        android:text="jhsjhdsk"
        android:textSize="17sp" />

    <TextView
        android:id="@+id/child_price"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="10dp"
        android:text="¥0.0" />


</LinearLayout>
<com.bwei.yk01.MyAddSub
    android:id="@+id/add_sub"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:gravity="center_vertical"/>

复选框

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="80dp"
    android:layout_height="40dp"
    android:orientation="horizontal">

<CheckBox
    android:id="@+id/box_parent"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" />

<TextView
    android:id="@+id/text_parent"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="商家"
    android:textSize="20sp" />
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值