购物车的实现案例

创建框架实现activity

package com.example.mr.xiangmu2_yuekaomoni;

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

import com.example.mr.xiangmu2_yuekaomoni.apdater.GouAdapter;
import com.example.mr.xiangmu2_yuekaomoni.bean.Datadatabean;
import com.example.mr.xiangmu2_yuekaomoni.bean.Goubean;
import com.example.mr.xiangmu2_yuekaomoni.presenter.Gpjiekou;
import com.example.mr.xiangmu2_yuekaomoni.presenter.Gpresenter;
import com.example.mr.xiangmu2_yuekaomoni.utils.Goucard;

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

public class GouActivity extends AppCompatActivity implements Gpjiekou {


    private Goucard goucard;
    private CheckBox quanxuan;
    private TextView heji;
    private TextView jiesuan;
    private Gpresenter gpresenter;
    private List<Goubean.DataBean> data;
    private List<List<Goubean.DataBean.ListBean>> list;
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(msg.what==0){
                Pricebean price= (Pricebean) msg.obj;
                heji.setText("合计:"+price.getPrice());
                jiesuan.setText("去结算("+price.getCount()+")");
            }else if(msg.what==55){
                info();
            }
        }
    };
    private GouAdapter gouAdapter;

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

    }

    private void initView() {
        goucard = (Goucard) findViewById(R.id.goucard);
        quanxuan = (CheckBox) findViewById(R.id.quanxuan);
        heji = (TextView) findViewById(R.id.heji);
        jiesuan = (TextView) findViewById(R.id.jiesuan);
//去样式
        goucard.setGroupIndicator(null);
        //创建引用
        gpresenter = new Gpresenter(this);
        quanxuan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                gouAdapter.quanxuan(quanxuan.isChecked());
            }
        });



        info();

    }

    private void info() {
        gpresenter.getpaht();
    }

    @Override
    public void cheng(Goubean json) {
//获取集合
        data = json.getData();
        //创建集合添加子集合
        list = new ArrayList<List<Goubean.DataBean.ListBean>>();
        for (int i = 0; i< data.size(); i++){
            list.add(data.get(i).getList());
        }

        //循环二级列表判断是否选改变一级状态
        for(int i=0;i<data.size();i++){
            if(ischilserstate(i)){
                data.get(i).setIschecd(true);
            }
        }

        //全选根据一级全部选中所选中
        quanxuan.setChecked(isgroupstate());
        //开启适配器
        gouAdapter = new GouAdapter(handler,data,list,GouActivity.this);
        goucard.setAdapter(gouAdapter);

        //展示所有
        for(int i=0;i<data.size();i++){
            goucard.expandGroup(i);
        }
        //调取价钱方法
        gouAdapter.sendpriceanfcount();



    }
    //判断二级是否全选
    private boolean ischilserstate(int i) {
        for(int j=0;j<data.get(i).getList().size();j++){
            if(data.get(i).getList().get(j).getSelected()==0){
                return false;
            }
        }
        return true;
    }

    //判断一级是否全部选中
    private Boolean isgroupstate(){
        for(int i=0;i<data.size();i++){
            if(!data.get(i).isIschecd()){
                return false;
            }
        }
        return true;
    }



}
适配器
package com.example.mr.xiangmu2_yuekaomoni.apdater;

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.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;

import com.example.mr.xiangmu2_yuekaomoni.Pricebean;
import com.example.mr.xiangmu2_yuekaomoni.R;
import com.example.mr.xiangmu2_yuekaomoni.bean.Goubean;
import com.example.mr.xiangmu2_yuekaomoni.utils.Myretrofit;
import com.example.mr.xiangmu2_yuekaomoni.utils.SerViceAPI;
import com.facebook.drawee.view.SimpleDraweeView;

import org.json.JSONObject;

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

import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

import static com.example.mr.xiangmu2_yuekaomoni.utils.Myretrofit.serViceAPI;

/**
 * Created by Mr赵 on 2018/1/14.
 */

public class GouAdapter extends BaseExpandableListAdapter {
    Handler handler;
    List<Goubean.DataBean> data;;
    List<List<Goubean.DataBean.ListBean>> list;
    Context ctx;
    private int size;
    private int index;
    private int chidesize;
    private int childindex;

    public GouAdapter(Handler handler, List<Goubean.DataBean> data, List<List<Goubean.DataBean.ListBean>> list, Context ctx) {
        this.handler = handler;
        this.data = data;
        this.list = list;
        this.ctx = ctx;
    }
    @Override
    public int getGroupCount() {
        return data.size();
    }

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

    @Override
    public Object getGroup(int da) {
        return data.get(da);
    }

    @Override
    public Object getChild(int da, int er) {
        return data.get(da).getList().get(er);
    }

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

    @Override
    public long getChildId(int da, int er) {
        return er;
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }
    @Override
    public boolean isChildSelectable(int i, int i1) {
        return true;
    }
    /*
    * 一级
    * */
    @Override
    public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) {
        final grophodel gh;
        if(view==null){
            gh=new grophodel();
            view=View.inflate(ctx, R.layout.yijibuju,null);
            gh.check_yiji = view.findViewById(R.id.check_yiji);
            gh.text_yiji = view.findViewById(R.id.text_yiji);
            view.setTag(gh);
        }else{
            gh= (grophodel) view.getTag();
        }
        //赋值
        Goubean.DataBean dataBean = data.get(i);
        gh.text_yiji.setText(dataBean.getSellerName());
        gh.check_yiji.setChecked(dataBean.isIschecd());
        //点击一级状态改变耳机状态
        gh.check_yiji.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //获取此组中所有自条目
                chidesize = data.get(i).getList().size();
                childindex = 0;
                updataAllInGroup(gh.check_yiji.isChecked(),data.get(i));
            }
        });

        return view;
    }

    private void updataAllInGroup(final boolean checked, final Goubean.DataBean dataBean) {
        Goubean.DataBean.ListBean listBean = dataBean.getList().get(childindex);
        Map<String, String> params=new HashMap<>();
        params.put("uid","2834");
        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()));

        SerViceAPI serViceAPI = Myretrofit.getSerViceAPI();
        Myretrofit.serViceAPI.getcha(params).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Goubean>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(Goubean datadatabean) {
                        index = index +1;
                        if(index < size){
                            updataAllInGroup(checked,dataBean);
                        }else {
                            Message obtain = Message.obtain();
                            obtain.what=55;
                            handler.sendMessage(obtain);
                        }
                    }
                });

    }

    /*
    * erji
    * */
    @Override
    public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
        childehodel ch;
        if(view==null){
            ch=new childehodel();
            view=View.inflate(ctx, R.layout.erjibuju,null);
            ch.check_erji=view.findViewById(R.id.check_erji);
            ch.img_erji=view.findViewById(R.id.img_erji);
            ch.title_erji=view.findViewById(R.id.title_erji);
            ch.price_erji=view.findViewById(R.id.price_erji);
            ch.jia_erji=view.findViewById(R.id.jia_erji);
            ch.num_erji=view.findViewById(R.id.num_erji);
            ch.jian_erji=view.findViewById(R.id.jian_erji);
            ch.shan=view.findViewById(R.id.shan);
            view.setTag(ch);
        }
        else{
            ch= (childehodel) view.getTag();
        }
        final Goubean.DataBean.ListBean listBean = data.get(i).getList().get(i1);
        //复制
        ch.check_erji.setChecked(listBean.getSelected()==0?false:true);
        ch.title_erji.setText(listBean.getTitle());
        ch.price_erji.setText("¥:"+listBean.getBargainPrice());
        ch.num_erji.setText(listBean.getNum()+"");
        String[] split = listBean.getImages().split("\\|");
        ch.img_erji.setImageURI(split[0]);
//二级列表点击事件
        ch.check_erji.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                updatachild(listBean);
            }
        });
        ch.jia_erji.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                upallNum(listBean,true);
            }
        });
        ch.jian_erji.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(listBean.getNum()==1){
                    return;
                }
                upallNum(listBean,false);
            }
        });
        //删除
        ch.shan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(listBean.getSelected()==1){
                    OkHttpClient okHttpClient = new OkHttpClient();
                    Request build = new Request.Builder()
                            .url("http://120.27.23.105/product/deleteCart?uid=2834&pid=" + listBean.getPid() + "")
                            .build();
                    okhttp3.Call call = okHttpClient.newCall(build);
                    call.enqueue(new Callback() {
                        @Override
                        public void onFailure(okhttp3.Call call, IOException e) {

                        }

                        @Override
                        public void onResponse(okhttp3.Call call, okhttp3.Response response) throws IOException {
                            String string = response.body().string();
                            try {
                                JSONObject jsonObject = new JSONObject(string);
                                String msg = jsonObject.getString("msg");
                                if(msg.equals("删除购物车成功")){
                                    //Toast.makeText(ctx,"已删除",Toast.LENGTH_SHORT).show();
                                    Map<String, String> params=new HashMap<>();
                                    params.put("uid","2834");
                                    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()));
                                    SerViceAPI serViceAPI = Myretrofit.getSerViceAPI();
                                    Myretrofit.serViceAPI.getcha(params).observeOn(Schedulers.io())
                                            .observeOn(AndroidSchedulers.mainThread())
                                            .subscribe(new Subscriber<Goubean>() {
                                                @Override
                                                public void onCompleted() {

                                                }

                                                @Override
                                                public void onError(Throwable e) {

                                                }

                                                @Override
                                                public void onNext(Goubean datadatabean) {
                                                    Message obtain = Message.obtain();
                                                    obtain.what=55;
                                                    handler.sendMessage(obtain);
                                                }
                                            });


                                }/*else{
                                    Toast.makeText(ctx,"删除失败",Toast.LENGTH_SHORT).show();
                                }*/
                            } catch (Exception e) {
                                e.printStackTrace();
                            }


                        }
                    });
                }else{
                    Toast.makeText(ctx,"请勾选",Toast.LENGTH_SHORT).show();
                }
            }
        });


        return view;
    }

    private void upallNum(Goubean.DataBean.ListBean listBean, boolean b) {
        //?uid=71&sellerid=1&pid=1&selected=0&num=10
        Map<String, String> params=new HashMap<>();
        params.put("uid","2834");
        params.put("sellerid", String.valueOf(listBean.getSellerid()));
        params.put("pid", String.valueOf(listBean.getPid()));
        params.put("selected", String.valueOf(listBean.getSelected()));
        if(b){
            params.put("num", String.valueOf(listBean.getNum()+1));
        }else{
            params.put("num", String.valueOf(listBean.getNum()-1));
        }
        SerViceAPI serViceAPI = Myretrofit.getSerViceAPI();
        Myretrofit.serViceAPI.getcha(params).observeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Goubean>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(Goubean datadatabean) {
                        Message obtain = Message.obtain();
                        obtain.what=55;
                        handler.sendMessage(obtain);
                    }
                });

    }

    private void updatachild(Goubean.DataBean.ListBean listBean) {
        //?uid=71&sellerid=1&pid=1&selected=0&num=10
        Map<String, String> params=new HashMap<>();
        params.put("uid","2834");
        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()));
        SerViceAPI serViceAPI= Myretrofit.getSerViceAPI();
        Myretrofit.serViceAPI.getcha(params).observeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Goubean>() {

                    public void onCompleted() {

                    }


                    public void onError(Throwable e) {

                    }


                    public void onNext(Goubean datadatabean) {
                        Message obtain = Message.obtain();
                        obtain.what=55;
                        handler.sendMessage(obtain);
                    }
                });

    }


    /*
   * 点击全选改变所有状态
   * */
    public void quanxuan(boolean checkee){
        List<Goubean.DataBean.ListBean> liss=new ArrayList<>();
        for (int i=0;i<data.size();i++){
            for(int j=0;j<data.get(i).getList().size();j++){
                liss.add(data.get(i).getList().get(j));
            }
        }
        size = liss.size();
        index =0;
        //通过递归更新自条目的选中
        updateAllchilde(liss,checkee);
    }

    private void updateAllchilde(final List<Goubean.DataBean.ListBean> liss, final boolean checkee) {
        Goubean.DataBean.ListBean listBean = liss.get(index);
        //?uid=71&sellerid=1&pid=1&selected=0&num=10
        Map<String, String> params=new HashMap<>();
        params.put("uid","2834");
        params.put("sellerid", String.valueOf(listBean.getSellerid()));
        params.put("pid", String.valueOf(listBean.getPid()));
        params.put("selected", String.valueOf(checkee?1:0));
        params.put("num", String.valueOf(listBean.getNum()));

        SerViceAPI serViceAPI= Myretrofit.getSerViceAPI();
        Myretrofit.serViceAPI.getcha(params).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Goubean>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(Goubean datadatabean) {
                        index = index +1;
                        if(index < size){
                            updateAllchilde(liss,checkee);
                        }else {
                            Message obtain = Message.obtain();
                            obtain.what=55;
                            handler.sendMessage(obtain);
                        }
                    }
                });


    }


    /*
   * 计算金钱
   **/
    public void sendpriceanfcount(){
        double price=0;
        int count=0;
        for(int i=0;i<data.size();i++){
            for(int j=0;j<data.get(i).getList().size();j++){
                if(data.get(i).getList().get(j).getSelected()==1){
                    price+=data.get(i).getList().get(j).getBargainPrice()*data.get(i).getList().get(j).getNum();
                    count+=data.get(i).getList().get(j).getNum();
                }
            }
        }
        Pricebean pricebean = new Pricebean(price, count);
        Message obtain = Message.obtain();
        obtain.what=0;
        obtain.obj=pricebean;
        handler.sendMessage(obtain);


    }

    /*
* 优化
* */
    class grophodel{
        CheckBox check_yiji;
        TextView text_yiji;
    }
    class childehodel{
        CheckBox check_erji;
        SimpleDraweeView img_erji;
        TextView title_erji;
        TextView price_erji;
        TextView jia_erji;
        TextView num_erji;
        TextView jian_erji;
        Button shan;
    }
}
首页布局
<?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.mr.xiangmu2_yuekaomoni.GouActivity">
    <!--标题-->
    <LinearLayout
        android:layout_alignParentTop="true"
        android:id="@+id/biaoti"
        android:padding="20dp"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:text="购物车"
            android:textSize="25dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <ImageView
            android:background="@drawable/shp"
            android:layout_width="20dp"
            android:layout_height="20dp" />

    </LinearLayout>
    <!--线-->
    <TextView
        android:id="@+id/xian"
        android:layout_below="@+id/biaoti"
        android:background="#e4e2e2"
        android:layout_width="match_parent"
        android:layout_height="2dp" />

    <ScrollView
        android:layout_below="@+id/xian"
        android:layout_above="@+id/linear_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <com.example.mr.xiangmu2_yuekaomoni.utils.Goucard

            android:id="@+id/goucard"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            >

        </com.example.mr.xiangmu2_yuekaomoni.utils.Goucard>
    </ScrollView>
    <!--底部结算-->
    <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:layout_marginRight="10dp"
            android:button="@null"
            android:background="@drawable/check_box_selector"
            android:id="@+id/quanxuan"
            android:layout_width="25dp"
            android:layout_height="25dp" />

        <TextView
            android:id="@+id/heji"
            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/jiesuan"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent" />

    </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">
    <CheckBox
        android:button="@null"
        android:id="@+id/check_yiji"
        android:background="@drawable/check_box_selector"
        android:layout_width="25dp"
        android:layout_height="25dp" />

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

</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">
    <CheckBox
        android:layout_centerVertical="true"
        android:id="@+id/check_erji"
        android:button="@null"
        android:background="@drawable/check_box_selector"
        android:layout_width="25dp"
        android:layout_height="25dp" />
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/img_erji"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/check_erji"
        android:layout_marginLeft="10dp"
        android:layout_width="90dp"
        android:layout_height="90dp" />

    <TextView
        android:id="@+id/title_erji"
        android:layout_toRightOf="@+id/img_erji"
        android:layout_marginLeft="10dp"
        android:layout_alignTop="@+id/img_erji"
        android:maxLines="2"
        android:minLines="2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/price_erji"
        android:layout_toRightOf="@+id/img_erji"
        android:layout_marginLeft="10dp"

        android:layout_below="@+id/title_erji"
        android:text="¥0.00"
        android:textColor="#ff0000"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:layout_marginLeft="10dp"
        android:layout_below="@+id/price_erji"
        android:layout_toRightOf="@+id/img_erji"
        android:layout_alignBottom="@+id/img_erji"
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/jian_erji"
            android:text="一"
            android:padding="5dp"
            android:background="@drawable/biangkuangxian"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:gravity="center"
            android:id="@+id/num_erji"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:text="1"
            android:background="@drawable/biangkuangxian"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />

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


    </LinearLayout>

    <Button
        android:layout_alignBottom="@+id/img_erji"

        android:background="#f00"
        android:textColor="#fff"
        android:id="@+id/shan"
        android:layout_alignParentRight="true"
        android:text="删除"
        android:layout_width="wrap_content"
        android:layout_height="30dp" />
</RelativeLayout>
自定义布局
package com.example.mr.xiangmu2_yuekaomoni.utils;

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

/**
 * Created by Mr赵 on 2018/1/14.
 */

public class Goucard extends ExpandableListView{

    public Goucard(Context context) {
        super(context);
    }

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值