retrofit/实现购物车功能

来源:互联网 发布:手机省电软件 编辑:程序博客网 时间:2024/06/06 05:12

//依赖

compile 'com.facebook.fresco:webpsupport:0.12.0'compile 'com.youth.banner:banner:1.4.9'compile 'io.reactivex.rxjava2:rxjava:2.1.7'compile 'io.reactivex.rxjava2:rxandroid:2.0.1'compile 'com.jakewharton:butterknife:8.8.1'compile 'com.squareup.retrofit2:retrofit:2.3.0'compile 'com.squareup.retrofit2:converter-gson:2.3.0'compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'compile 'com.github.bumptech.glide:glide:4.3.1'compile 'com.android.support:recyclerview-v7:26.+'compile 'com.facebook.fresco:fresco:1.2.0'compile 'com.facebook.fresco:animated-base-support:0.12.0'compile 'com.facebook.fresco:animated-gif:0.12.0'compile 'com.facebook.fresco:animated-webp:0.12.0'compile 'com.facebook.fresco:webpsupport:0.12.0'annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'compile 'org.greenrobot:eventbus:3.1.1'
android:theme="@style/Theme.AppCompat.Light.NoActionBar"> <!-- 隐藏标题栏 -->

//Http

public class RetrofitUtils {    private static volatile RetrofitUtils instance;    private final Retrofit retrofit;    private RetrofitUtils(){        retrofit = new Retrofit.Builder()                .baseUrl("http://120.27.23.105")                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                .addConverterFactory(GsonConverterFactory.create())                .build();        Log.i("retroifit",retrofit+"");    }    public static RetrofitUtils getInstance(){        if(instance==null){            synchronized (RetrofitUtils.class){                if(instance==null){                    instance=new RetrofitUtils();                }            }        }        return instance;    }    public UtilsPost getApiservise(){        return retrofit.create(UtilsPost.class);    }}

=======================================================================================

public interface UtilsPost {    @GET("/product/getCarts")    Flowable<DataBeans> getVideo2(@QueryMap Map<String, String> map);    @GET("/product/deleteCart")    Flowable<deletebean> getVideo(@QueryMap Map<String, String> map);}
==========================================================================================

//model

public class Models implements ModelPost {    private PlayPresenter playPresenter;    public Models(PlayPresenter playPresenter) {        this.playPresenter = playPresenter;    }    @Override    public void getData(Map<String, String> map) {        Flowable<DataBeans> video2 = RetrofitUtils.getInstance().getApiservise().getVideo2(map);        Log.i("fff",video2+"");        playPresenter.get2(video2);    }}
=============================================================================

public interface ModelPost {    void getData(Map<String, String> map);}
===============================================================================

//presenter

public class PlayPresenter implements PresenterPost {    private Iview iview;    private DisposableSubscriber<DataBeans> subscriber;    private List<Goodsuser> list;    private List<List<Goodsuser2>> list2;    public PlayPresenter(Iview iview, List<Goodsuser> list, List<List<Goodsuser2>> list2) {        this.iview = iview;        this.list = list;        this.list2 = list2;    }    @Override    public void getData2(Map<String, String> map) {        Models model = new Models(this);        Log.i("mmm",map+"");        model.getData(map);    }
//绑定public void detachView() {    if (iview != null) {        iview = null;    }    if (disposableSubscriber != null) {        if (!disposableSubscriber.isDisposed()) {            disposableSubscriber.dispose();        }    }}
public void get2(Flowable<DataBeans> getVideo){ subscriber= getVideo.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(new DisposableSubscriber<DataBeans>() { @Override public void onNext(DataBeans retBean2) { if(retBean2!=null){ List<DataBeans.DataBean> data = retBean2.getData(); for (int i=0;i<data.size();i++){ String sellerName = data.get(i).getSellerName(); list.add(new Goodsuser(false,sellerName)); List<DataBeans.DataBean.ListBean> list = data.get(i).getList(); List<Goodsuser2> list1=new ArrayList<Goodsuser2>(); for (int j = 0; j<list.size(); j++){ String title = list.get(j).getTitle(); String images = list.get(j).getImages(); double price = list.get(j).getPrice(); int pid = list.get(j).getPid(); list1.add(new Goodsuser2(title,images,price,1,false,pid)); } list2.add(list1); } } iview.onSuccess2(list,list2); } @Override public void onError(Throwable t) { iview.onFailed2(new Exception(t)); } @Override public void onComplete() { } }); }}
==================================================================================

public interface PresenterPost {    void getData2(Map<String, String> map);}
=====================================================================================

//加减器

public class AddDleneteView extends LinearLayout {    private OnAddDelClickListener listener;    public EditText etNumber;    //对外提供一个点击的回调接口    public interface OnAddDelClickListener{        void onAddClick(View v);        void onDelClick(View v);    }    public void setOnAddDelClickListener(OnAddDelClickListener listener){        if(listener!=null){            this.listener=listener;        }    }    public AddDleneteView(Context context) {        this(context,null);    }    public AddDleneteView(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public AddDleneteView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        initView(context, attrs, defStyleAttr);    }    private void initView(Context context, AttributeSet attrs, int defStyleAttr) {        View.inflate(context, R.layout.layout_tiem,this);        //获取控件        TextView txtDelete=findViewById(R.id.txt_delete);        TextView txtAdd=findViewById(R.id.txt_add);        etNumber = findViewById(R.id.et_number);        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AddDeleteViewStyle);        String leftText = typedArray.getString(R.styleable.AddDleneteView_left_text);        String rightText = typedArray.getString(R.styleable.AddDleneteView_right_text);        String middleText = typedArray.getString(R.styleable.AddDleneteView_middle_text);        int color = typedArray.getColor(R.styleable.AddDleneteView_left_text_color, Color.BLACK);        txtDelete.setText(leftText);        txtAdd.setText(rightText);        etNumber.setText(middleText);        txtDelete.setTextColor(color);        //回收        typedArray.recycle();        txtDelete.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View view) {                listener.onDelClick(view);            }        });        txtAdd.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View view) {                listener.onAddClick(view);            }        });    }    //对外提供一个修改数字的方法    public void setNumber(int number){        if(number>0){            etNumber.setText(number+"");        }    }    //对外提供一个获取当前数字的方法    public int getNumber(){        String string = etNumber.getText().toString();        int i = Integer.parseInt(string);        return i;    }}======
public interface Iview {    void onSuccess2(List<Goodsuser> list, List<List<Goodsuser2>> list2);    void onFailed2(Exception e);}

============================================================================

//attrs

<?xml version="1.0" encoding="utf-8"?><resources>    <declare-styleable name="AddDleneteView">        <attr name="left_text" format="string"></attr>        <attr name="right_text" format="string"></attr>        <attr name="middle_text" format="string"></attr>        <attr name="left_text_color" format="color"></attr>    </declare-styleable>    <declare-styleable name="AddDeleteViewStyle"></declare-styleable></resources>
===============================================================================

//加减器布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal"    >    <TextView        android:id="@+id/txt_delete"        android:layout_width="30dp"        android:layout_height="30dp"        android:text="-"        android:gravity="center"        android:background="#e4a022"/>    <EditText        android:id="@+id/et_number"        android:layout_marginTop="2dp"        android:layout_width="50dp"        android:layout_height="30dp"        android:background="#f2efef"        android:gravity="center"        android:text="1"        android:inputType="number"        />    <TextView        android:id="@+id/txt_add"        android:layout_width="30dp"        android:layout_height="30dp"        android:text="+"        android:gravity="center"        android:background="#d59216"/></LinearLayout>
===================

<bwei.com.shopingcart.view.AddDleneteView    android:id="@+id/adv"    android:layout_width="160dp"    android:layout_height="30dp"    android:layout_marginTop="30dp"    android:layout_marginLeft="140dp"    app:left_text="-"    app:right_text="+"    app:middle_text="1"    android:focusable="false"    ></bwei.com.shopingcart.view.AddDleneteView>
==================================================================

//Adapater

public class Goods extends BaseExpandableListAdapter {    private Context context;    private List<Goodsuser> list;    private List<List<Goodsuser2>> list2;    MainActivity con;    public Goods(Context context, List<Goodsuser> list, List<List<Goodsuser2>> list2) {        this.context = context;        this.list = list;        this.list2 = list2;        con= (MainActivity) context;    }    @Override    public int getGroupCount() {        return list.size();    }    @Override    public int getChildrenCount(int i) {        return list2.get(i).size();    }    @Override    public Object getGroup(int i) {        return list.get(i);    }    @Override    public Object getChild(int i, int i1) {        return list2.get(i).get(i1).getTitle();    }    @Override    public long getGroupId(int i) {        return i;    }    @Override    public long getChildId(int i, int i1) {        return i1;    }    @Override    public boolean hasStableIds() {        return false;    }    @Override    public View getGroupView(final int position, boolean b, View view, ViewGroup viewGroup) {        final GroupViewHolder holder;        if(view==null){            holder = new GroupViewHolder();            view=view.inflate(context, R.layout.layout_suer,null);            holder.cb=(CheckBox)view.findViewById(R.id.cb1);            holder.tv=(TextView)view.findViewById(R.id.titles);            view.setTag(holder);        }else{            holder=(GroupViewHolder)view.getTag();        }        holder.cb.setChecked(list.get(position).isCb1());        holder.tv.setText(list.get(position).getName());        holder.cb.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //首先获取到父级的选中状态                boolean checked1 = holder.cb.isChecked();                //将状态值添加进存放父级的集合                list.get(position).setCb1(checked1);                //获取到Activity,方便对全选做操作                MainActivity con=(MainActivity)context;                //遍历父级的集合                for (Goodsuser i:list){                    //取出我们添加在集合的一个布尔值                    boolean item1_cb = i.isCb1();                    //如果我们的父级其中有一条没有被选中                    if(!item1_cb){                        //那么我们的总的全选按钮就不勾选                        con.ck_all.setChecked(false);                        break;//必选加,否则会出现去掉父级的按钮全选按钮就不会被取消                    }else{                        con.ck_all.setChecked(true);                    }                }                con.changesum(list2);                //获取到我们子级的集合长度                int size = list2.get(position).size();                //如果我们的父级全部被选中                if(checked1){                    //那么你就遍历子级的长度                    for (int j=0;j<size;j++){                        //将我们的子级全部都选中                        list2.get(position).get(j).setCb2(true);                    }                }else{                    for (int j=0;j<size;j++){                        list2.get(position).get(j).setCb2(false);                    }                }                //刷新我们的适配器                notifyDataSetChanged();                con.changesum(list2);            }        });        return view;    }    @Override    public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {        final ChildViewHolder holder;        if(view==null){            holder=new ChildViewHolder();            view=view.inflate(context,R.layout.layout_suertow,null);            holder.rv=view.findViewById(R.id.tittle);            holder.item_img66=view.findViewById(R.id.img);            holder.item_price=view.findViewById(R.id.price3);            holder.item_cb=view.findViewById(R.id.cb2);            holder.txt_delete=view.findViewById(R.id.txt_delete);            holder.txt_add=view.findViewById(R.id.txt_add);            holder.txt_delete.setText("-");            holder.txt_add.setText("+");            holder.jiajia=view.findViewById(R.id.adv);            holder.jiajia.setNumber(list2.get(i).get(i1).getNum());            holder.jiajia.setOnAddDelClickListener(new AddDleneteView.OnAddDelClickListener() {                @Override                public void onAddClick(View v) {                    int number = holder.jiajia.getNumber();                    number++;                    holder.jiajia.setNumber(number);                    list2.get(i).get(i1).setNum(number);                    Log.e("-----jia",number+"");                    con.changesum(list2);                }                @Override                public void onDelClick(View v) {                    int number = holder.jiajia.getNumber();                    number--;                    holder.jiajia.setNumber(number);                    list2.get(i).get(i1).setNum(number);                    Log.e("-----建",number+"");                    notifyDataSetChanged();                    con.changesum(list2);                }            });            view.setTag(holder);        }else{            holder=(ChildViewHolder)view.getTag();        }        holder.rv.setText(list2.get(i).get(i1).getTitle());        String images =list2.get(i).get(i1).getImg();        String[] split = images.split("\\|");        Glide.with(context).load(split[0]).into(holder.item_img66);        holder.item_price.setText(list2.get(i).get(i1).getPrice()+"");        holder.item_cb.setChecked(list2.get(i).get(i1).isCb2());        holder.item_cb.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //定义一个flag用于跳出循环                boolean flag=false;                //获取我们子级的选中状态                boolean checked = holder.item_cb.isChecked();                //将选中状态返回给我们存放子级的集合中                list2.get(i).get(i1).setCb2(checked);                //获取到Activity                MainActivity con=(MainActivity)context;                //循环我们的子级集合                for (List<Goodsuser2> i1:list2){                    //循环第二层的集合                    for (int j=0;j<i1.size();j++){                        //获取到子级条目数的选中状态                        boolean chokx = i1.get(j).isCb2();                        //如果我们的子级条目有一条未被选中                        if(!chokx){                            //那么就让我们的全选按钮为未选中                            con.ck_all.setChecked(false);                            //同时将父级的按钮也变为未选中                            list.get(i).setCb1(false);                            //flag为true,跳出本层的循环                            flag=true;                            break;                        }else{                            con.ck_all.setChecked(true);                            list.get(i).setCb1(true);                        }                    }                    if (flag){                        break;                    }                }                con.changesum(list2);                //遍历每一个父级下面的子级集合判断                //获取到子级的集合长度                int size = list2.get(i).size();                //遍历子级集合                for (int e=0;e<size;e++){                    //获取到子级的选中状态                    boolean chokx = list2.get(i).get(e).isCb2();                    //如果子级有一条未被选中                    if(!chokx){                        //那么我们的父级按钮就不会被选中                        list.get(i).setCb1(false);                        break;                    }else{                        list.get(i).setCb1(true);                    }                }                notifyDataSetChanged();                con.changesum(list2);            }        });        return view;    }    @Override    public boolean isChildSelectable(int i, int i1) {        return false;    }    class GroupViewHolder {        CheckBox cb;        TextView tv;    }    class ChildViewHolder {        TextView rv;        ImageView item_img66;        TextView item_price;        TextView txt_delete;        TextView et_number;        TextView txt_add;        CheckBox item_cb;        AddDleneteView jiajia;    }}

//Activty解绑

//解绑@Overrideprotected void onDestroy() {    super.onDestroy();    if (dayPresenter != null) {        dayPresenter.detachView();    }}

原创粉丝点击