您的位置:首页 > 编程语言 > Java开发

RxJava+Retrofit+Mvp 购物车

2017-12-18 08:49 363 查看


依赖

 //黄油刀

    compile 'com.jakewharton:butterknife:8.8.1'

    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'

    //Retrofit

    compile 'com.squareup.retrofit2:retrofit:2.3.0'//retrofit依赖

    compile 'com.squareup.retrofit2:converter-gson:2.3.0'//retrofit内部封装的GSON

    //fresco

    compile 'com.facebook.fresco:fresco:0.12.0'

    compile 'com.facebook.fresco:animated-base-support:0.12.0'

    compile 'com.facebook.fresco:animated-webp:0.12.0'

    compile 'com.facebook.fresco:webpsupport:0.12.0'

    //2.0 Rxjava

    compile "io.reactivex.rxjava2:rxjava:2.1.7"

    compile "com.squareup.retrofit2:adapter-rxjava2:2.3.0"

    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

    compile 'com.squareup.okhttp3:okhttp:3.9.0'

    compile 'com.google.code.gson:gson:2.8.1'

values 下 创建 attrs 文件

<resources>

    <declare-styleable name="AddDeleteViewStyle">

        <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>

</resources

activity_main

<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical">

    <!--头布局-->

    <LinearLayout

        android:id="@+id/top_bar"

        android:layout_width="match_parent"

        android:layout_height="48dp"

        android:background="#f7f7f7"

        android:orientation="vertical" >

        <RelativeLayout

            android:layout_width="match_parent"

            android:layout_height="48dp"

            android:background="@android:color/transparent"

            android:orientation="vertical" >

            <TextView

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:gravity="center"

                android:minHeight="48dp"

                android:text="购物车"

                android:textColor="#1a1a1a"

                android:textSize="16sp" />

            <TextView

                android:id="@+id/edit"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_alignParentRight="true"

                android:layout_marginRight="40dp"

                android:gravity="center"

                android:minHeight="48dp"

                android:text="编辑"

                android:textColor="#1a1a1a"

                android:textSize="14sp"

                android:visibility="visible" />

        </RelativeLayout>

    </LinearLayout>

    <ExpandableListView

        android:id="@+id/exListView"

        android:layout_width="match_parent"

        android:layout_height="0dp"

        android:layout_weight="1"

        android:childIndicator="@null"

        android:groupIndicator="@null" >

    </ExpandableListView>

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="50dp"

        android:gravity="center_vertical"

        android:orientation="horizontal" >

        <CheckBox

            android:id="@+id/all_chekbox"

            android:layout_marginLeft="20dp"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content" />

        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="全选"/>

        <LinearLayout

            android:id="@+id/ll_info"

            android:layout_width="0dp"

            android:layout_height="wrap_content"

            android:layout_weight="4"

            >

            <LinearLayout

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:orientation="vertical"

                android:layout_marginRight="20dp"

                android:layout_weight="1"

                >

                <LinearLayout

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content"

                    android:orientation="horizontal"

                    android:gravity="right"

                    >

                    <TextView

                        android:layout_width="wrap_content"

                        android:layout_height="wrap_content"

                        android:layout_marginLeft="5dp"

                        android:text="合计:"

                        android:textSize="18sp"

                        android:textStyle="bold" />

                    <TextView

                        android:id="@+id/total_price"

                        android:layout_width="wrap_content"

                        android:layout_height="wrap_content"

                        android:text="¥0.00"

                        android:textColor="#f23232"

                        android:textSize="16sp"

                        android:textStyle="bold" />

                </LinearLayout>

                <TextView

                    android:id="@+id/total_number"

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content"

                    android:text="共有商品:0件"

                    android:gravity="right"

                    android:textSize="16sp"

                    android:textStyle="bold" />

            </LinearLayout>

            <TextView

                android:id="@+id/tv_go_to_pay"

                android:layout_width="match_parent"

                android:layout_height="match_parent"

                android:layout_weight="3"

                android:background="#fd7a05"

                android:clickable="true"

                android:gravity="center"

                android:text="结算"

                android:textColor="#FAFAFA"

     
4000
           />

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

ex_child_item

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:fresco="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent"

    android:layout_height="230dp"

    android:orientation="horizontal">

    <CheckBox

        android:id="@+id/child_checkbox"

        android:layout_marginTop="50dp"

        android:layout_marginLeft="20dp"

        android:layout_marginBottom="50dp"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        />

    <RelativeLayout

        android:layout_marginLeft="20dp"

        android:layout_width="match_parent"

        android:layout_height="match_parent">

        <TextView

            android:id="@+id/shop_title"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_alignParentLeft="true"

            android:layout_alignParentStart="true"

            android:layout_marginLeft="17dp"

            android:layout_marginStart="17dp"

            android:text="TextView"

            android:layout_alignParentTop="true" />

        <!--<ImageView

            android:id="@+id/shop_img"

            android:layout_width="90dp"

            android:layout_height="90dp"

            android:layout_marginTop="30dp"

            app:srcCompat="@mipmap/ic_launcher"

            android:layout_below="@+id/shop_name"

            android:layout_alignParentLeft="true"

            android:layout_alignParentStart="true" />-->

        <com.facebook.drawee.view.SimpleDraweeView

            android:id="@+id/shop_img"

            android:layout_width="90dp"

            android:layout_height="90dp"

            android:layout_marginTop="30dp"

            fresco:placeholderImage="@mipmap/ic_launcher"

            android:layout_below="@+id/shop_name"

            android:layout_alignParentLeft="true"

            android:layout_alignParentStart="true"

            />

        <TextView

            android:id="@+id/shop_price"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_alignTop="@+id/shop_img"

            android:layout_centerHorizontal="true"

            android:layout_marginTop="10dp"

            android:text="¥20"

            android:textColor="#f23232"/>

        <com.bwei.gepeng.myview.AddDeleteView

            android:id="@+id/adv"

            android:layout_width="160dp"

            android:layout_height="30dp"

            android:layout_below="@+id/shop_price"

            android:layout_marginTop="30dp"

            android:layout_marginLeft="140dp"

            app:left_text="-"

            app:right_text="+"

            app:middle_text="1"

            android:focusable="false"

            >

        </com.bwei.gepeng.myview.AddDeleteView>

        <Button

            android:id="@+id/shop_delete"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_alignParentEnd="true"

            android:layout_alignParentRight="true"

            android:layout_centerVertical="true"

            android:visibility="invisible"

            android:text="删除" />

    </RelativeLayout>

</LinearLayout>

ex_group_item

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:background="#cfc3c3"

    android:orientation="horizontal">

    <CheckBox

        android:id="@+id/group_checkbox"

        android:layout_marginLeft="20dp"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:focusable="false"/>

    <TextView

        android:id="@+id/shop_name"

        android:layout_marginLeft="20dp"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:textSize="16dp" />

</LinearLayout>

layout_add_delete

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="horizontal"

    android:weightSum="1">

    <TextView

        android:id="@+id/txt_delete"

        android:layout_width="30dp"

        android:layout_height="30dp"

        android:text="减"

        android:gravity="center"

        android:background="#8b948b"/>

    <EditText

        android:id="@+id/et_number"

        android:layout_marginTop="2dp"

        android:layout_width="50dp"

        android:layout_height="30dp"

        android:background="@drawable/edit"

        android:layout_weight="0.00"

        android:gravity="center"

        android:text="1"/>

    <TextView

        android:id="@+id/txt_add"

        android:layout_width="30dp"

        android:layout_height="30dp"

        android:text="加"

        android:gravity="center"

        android:background="#8b948b"/>

</LinearLayout>

适配器

public class ExpandableAdapter extends BaseExpandableListAdapter {

    // private static final String TAG = "ExpandableAdapter二级列表适配器";

    private Context context;

    private List<GroupBean> groupBeen=new ArrayList<>();

    private List<List<ChildBean>> childBeen=new ArrayList<>();

    private MainActivity main;

    public ExpandableAdapter(Context context, List<GroupBean> groupBeen, List<List<ChildBean>> childBeen) {

        this.context = context;

        this.groupBeen = groupBeen;

        this.childBeen = childBeen;

        this.main = (MainActivity) context;

    }

    @Override

    public int getGroupCount() {

        return groupBeen.size();

    }

    @Override

    public int getChildrenCount(int i) {

        return childBeen.get(i).size();

    }

    @Override

    public Object getGroup(int i) {

        return groupBeen.get(i).getSellerName();

    }

    @Override

    public Object getChild(int i, int i1) {

        return childBeen.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 i, boolean b, View view, ViewGroup viewGroup) {

        //加载视图

        view=View.inflate(context, R.layout.ex_group_item ,null);

        final CheckBox groupCb= view.findViewById(R.id.group_checkbox);

        TextView shopName= view.findViewById(R.id.shop_name);

        shopName.setText(groupBeen.get(i).getSellerName());

        groupCb.setChecked(groupBeen.get(i).isGropuCb());

        //组复选按钮

        groupCb.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                boolean gchecked = groupCb.isChecked();

                groupBeen.get(i).setGropuCb(gchecked);

                //Main2Activity main= (Main2Activity) context;

                for(GroupBean i: groupBeen){

                    boolean gropuCb = i.isGropuCb();

                    if(!gropuCb){

                        main.allCheckbox.setChecked(false);

                        break;

                    }else{

                        main.allCheckbox.setChecked(true);

                    }

                }

                int size = childBeen.get(i).size();

                if(gchecked){

                    for(int r=0;r<size;r++){

                        //Toast.makeText(context,"group按钮"+ gchecked+""+size, Toast.LENGTH_SHORT).show();

                        childBeen.get(i).get(r).setChildCb(true);

                    }

                }else{

                    for(int r=0;r<size;r++){

                        //Toast.makeText(context,"group按钮"+ gchecked+""+size, Toast.LENGTH_SHORT).show();

                        childBeen.get(i).get(r).setChildCb(false);

                    }

                }

                notifyDataSetChanged();

                main.changesum(childBeen);

            }

        });

        return view;

    }

    //二级组

    @Override

    public View getChildView(final int i, final int i1, boolean b, View v, ViewGroup viewGroup) {

        //加载视图

        v=View.inflate(context, R.layout.ex_child_item ,null);

        final CheckBox childCb = v.findViewById(R.id.child_checkbox);

        TextView shopTitle= v.findViewById(R.id.shop_title);

        TextView shopPrice= v.findViewById(R.id.shop_price);

        //ImageView shopImg=v.findViewById(R.id.shop_img);

        //draweeView.setImageURI(uri);

        SimpleDraweeView shopImg = v.findViewById(R.id.shop_img);

        final AddDeleteView adv = v.findViewById(R.id.adv);

        Button shop_delete=v.findViewById(R.id.shop_delete);

        childCb.setChecked(childBeen.get(i).get(i1).isChildCb());

        String images = childBeen.get(i).get(i1).getImages();

        //Glide.with(context).load(images).into(shopImg);

        shopImg.setImageURI(images);

        shopTitle.setText(childBeen.get(i).get(i1).getTitle());

        shopPrice.setText(childBeen.get(i).get(i1).getPrice()+"");

        adv.setNumber(childBeen.get(i).get(i1).getNum());

        //final Main2Activity main= (Main2Activity) context;

        //控制删除按钮的显隐

        if(childBeen.get(i).get(i1).isBtn()){

            shop_delete.setVisibility(View.VISIBLE);

        }else{

            shop_delete.setVisibility(View.INVISIBLE);

        }

        //删除按钮监听

        shop_delete.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                int size = childBeen.get(i).size();

                if(size==1){

                    childBeen.remove(i);

                    groupBeen.remove(i);

                }else{

                    childBeen.get(i).remove(i1);

                }

                //点击删除后隐藏所有删除按钮

                for (List<ChildBean> i1:childBeen){

                    for(int r=0;r<i1.size();r++) {

                        i1.get(r).setBtn(false);

                    }

                }

                notifyDataSetChanged();

                main.changesum(childBeen);

            }

        });

        //加减器逻辑

        adv.setOnAddDelClickListener(new AddDeleteView.OnAddDelClickListener() {

            @Override

            public void onAddClick(View v) {

                int number = adv.getNumber();

                number++;

                adv.setNumber(number);

                childBeen.get(i).get(i1).setNum(number);

                main.changesum(childBeen);

            }

            @Override

            public void onDelClick(View v) {

                int number = adv.getNumber();

                if(number==1){

                    Toast.makeText(context,"用户最小数量为1",Toast.LENGTH_SHORT).show();

                }

                number--;

                adv.setNumber(number);

                childBeen.get(i).get(i1).setNum(number);

                main.changesum(childBeen);

            }

        });

        //二级组的复选框监听

        childCb.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                boolean flag=false;

          
11740
      boolean cchecked = childCb.isChecked();

                childBeen.get(i).get(i1).setChildCb(cchecked);

                //Toast.makeText(context,"child按钮"+ cchecked+""+i1, Toast.LENGTH_SHORT).show();

               // Main2Activity main= (Main2Activity) context;

                for (List<ChildBean> i1:childBeen){

                    for(int r=0;r<i1.size();r++) {

                        boolean childCb1 = i1.get(r).isChildCb();

                        if(!childCb1){

                            main.allCheckbox.setChecked(false);

                            groupBeen.get(i).setGropuCb(false);

                            flag=true;

                            break;

                        }else{

                            main.allCheckbox.setChecked(true);

                            groupBeen.get(i).setGropuCb(true);

                        }

                    }

                    if(flag){

                        break;

                    }

                }

                int size = childBeen.get(i).size();

                for(int x=0;x<size;x++) {

                    boolean childCb1 = childBeen.get(i).get(x).isChildCb();

                    if(!childCb1){

                        groupBeen.get(i).setGropuCb(false);

                        break;

                    }else{

                        groupBeen.get(i).setGropuCb(true);

                    }

                }

                notifyDataSetChanged();

                main.changesum(childBeen);

            }

        });

        return v;

    }

    @Override

    public boolean isChildSelectable(int i, int i1) {

        return false;

    }

}

----------------------------------------------------------------------------------

bean 类

public class ChildBean {

    private String title;

    private String images;

    private double price;

    private int num;

    private boolean childCb;

    private boolean btn;

    public ChildBean(String title, String images, double price, int num, boolean childCb, boolean btn) {

        this.title = title;

        this.images = images;

        this.price = price;

        this.num = num;

        this.childCb = childCb;

        this.btn = btn;

    }

    public boolean isBtn() {

        return btn;

    }

    public void setBtn(boolean btn) {

        this.btn = btn;

    }

    public String getTitle() {

        return title;

    }

    public void setTitle(String title) {

        this.title = title;

    }

    public String getImages() {

        return images;

    }

    public void setImages(String images) {

        this.images = images;

    }

    public double getPrice() {

        return price;

    }

    public void setPrice(double price) {

        this.price = price;

    }

    public int getNum() {

        return num;

    }

    public void setNum(int num) {

        this.num = num;

    }

    public boolean isChildCb() {

        return childCb;

    }

    public void setChildCb(boolean childCb) {

        this.childCb = childCb;

    }

    @Override

    public String toString() {

        return "ChildBean{" +

                "title='" + title + '\'' +

                ", images='" + images + '\'' +

                ", price=" + price +

                ", num=" + num +

                ", childCb=" + childCb +

                '}';

    }

}

-----------------------------------------------------------

请求的数据bean类

public class DataBean {

    /**

     * list : [{"bargainPrice":22.9,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/2542855.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t1930/284/2865629620/390243/e3ade9c4/56f0a08fNbd3a1235.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2137/336/2802996626/155915/e5e90d7a/56f0a09cN33e01bd0.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t1882/31/2772215910/389956/c8dbf370/56f0a0a2Na0c86ea6.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2620/166/2703833710/312660/531aa913/57709035N33857877.jpg!q70.jpg","num":2,"pid":24,"price":288,"pscid":2,"selected":0,"sellerid":1,"subhead":"三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》","title":"三只松鼠
坚果炒货 零食奶油味 碧根果225g/袋"}]

     * sellerName : 商家1

     * sellerid : 1

     */

    private String sellerName;

    private String sellerid;

    private List<ListBean> list;

    public String getSellerName() {

        return sellerName;

    }

    public void setSellerName(String sellerName) {

        this.sellerName = sellerName;

    }

    public String getSellerid() {

        return sellerid;

    }

    public void setSellerid(String sellerid) {

        this.sellerid = sellerid;

    }

    public List<ListBean> getList() {

        return list;

    }

    public void setList(List<ListBean> list) {

        this.list = list;

    }

    public static class ListBean {

        /**

         * bargainPrice : 22.9

         * createtime : 2017-10-14T21:48:08

         * detailUrl : https://item.m.jd.com/product/2542855.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends
         * images : https://m.360buyimg.com/n0/jfs/t1930/284/2865629620/390243/e3ade9c4/56f0a08fNbd3a1235.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2137/336/2802996626/155915/e5e90d7a/56f0a09cN33e01bd0.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t1882/31/2772215910/389956/c8dbf370/56f0a0a2Na0c86ea6.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2620/166/2703833710/312660/531aa913/57709035N33857877.jpg!q70.jpg
         * num : 2

         * pid : 24

         * price : 288.0

         * pscid : 2

         * selected : 0

         * sellerid : 1

         * subhead : 三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》

         * title : 三只松鼠 坚果炒货 零食奶油味 碧根果225g/袋

         */

        private double bargainPrice;

        private String createtime;

        private String detailUrl;

        private String images;

        private int num;

        private int pid;

        private double price;

        private int pscid;

        private int selected;

        private int sellerid;

        private String subhead;

        private String title;

        public double getBargainPrice() {

            return bargainPrice;

        }

        public void setBargainPrice(double bargainPrice) {

            this.bargainPrice = bargainPrice;

        }

        public String getCreatetime() {

            return createtime;

        }

        public void setCreatetime(String createtime) {

            this.createtime = createtime;

        }

        public String getDetailUrl() {

            return detailUrl;

        }

        public void setDetailUrl(String detailUrl) {

            this.detailUrl = detailUrl;

        }

        public String getImages() {

            return images;

        }

        public void setImages(String images) {

            this.images = images;

        }

        public int getNum() {

            return num;

        }

        public void setNum(int num) {

            this.num = num;

        }

        public int getPid() {

            return pid;

        }

        public void setPid(int pid) {

            this.pid = pid;

        }

        public double getPrice() {

            return price;

        }

        public void setPrice(double price) {

            this.price = price;

        }

        public int getPscid() {

            return pscid;

        }

        public void setPscid(int pscid) {

            this.pscid = pscid;

        }

        public int getSelected() {

            return selected;

        }

        public void setSelected(int selected) {

            this.selected = selected;

        }

        public int getSellerid() {

            return sellerid;

        }

        public void setSellerid(int sellerid) {

            this.sellerid = sellerid;

        }

        public String getSubhead() {

            return subhead;

        }

        public void setSubhead(String subhead) {

            this.subhead = subhead;

        }

        public String getTitle() {

            return title;

        }

        public void setTitle(String title) {

            this.title = title;

        }

    }

}

-------------------------------------------------------------------------

组合bean类

public class GroupBean {

    private String sellerName;

    private boolean gropuCb;

    public GroupBean(String sellerName, boolean gropuCb) {

        this.sellerName = sellerName;

        this.gropuCb = gropuCb;

    }

    public String getSellerName() {

        return sellerName;

    }

    public void setSellerName(String sellerName) {

        this.sellerName = sellerName;

    }

    public boolean isGropuCb() {

        return gropuCb;

    }

    public void setGropuCb(boolean gropuCb) {

        this.gropuCb = gropuCb;

    }

    @Override

    public String toString() {

        return "GroupBean{" +

                "sellerName='" + sellerName + '\'' +

                ", gropuCb=" + gropuCb +

                '}';

    }

}

-----------------------------------------------------------------------

组合泛型bean类

public class MsgBean <T> {

    private String code;

    private String msg;

    private T data;

    public MsgBean(String code, String msg, T data) {

        this.code = code;

        this.msg = msg;

        this.data = data;

    }

    public MsgBean() {

    }

    public String getCode() {

        return code;

    }

    public void setCode(String code) {

        this.code = code;

    }

    public String getMsg() {

        return msg;

    }

    public void setMsg(String msg) {

        this.msg = msg;

    }

    public T getData() {

        return data;

    }

    public void setData(T data) {

        this.data = data;

    }

    @Override

    public String toString() {

        return "MsgBean{" +

                "code='" + code + '\'' +

                ", msg='" + msg + '\'' +

                ", data=" + data +

                '}';

    }

}

--------------------------------------------------------------

http类 请求网络数据

public interface ApiService {

    //http://120.27.23.105/product/getCarts?uid=3802&source=android

    @GET("product/getCarts")

    Flowable<MsgBean<List<DataBean>>> getGoods(@QueryMap Map<String,String> map);

}

-------------------------------------------

public class RetrofitUtils {

    private static volatile RetrofitUtils instance;

    private final Retrofit retrofit;

    private RetrofitUtils(){

        OkHttpClient client=new OkHttpClient.Builder()

                .addInterceptor(new Logger())

                .build();

        retrofit = new Retrofit.Builder()

                .client(client)

                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())

                .addConverterFactory(GsonConverterFactory.create())

                .baseUrl("http://120.27.23.105/")

                .build();

    }

    public static RetrofitUtils getInstance(){

        if(instance==null){

            synchronized (RetrofitUtils.class){

                if(instance==null){

                    instance=new RetrofitUtils();

                }

            }

        }

        return instance;

    }

    public ApiService getApiService(){

        ApiService apiService = retrofit.create(ApiService.class);

        return apiService;

    }

    class Logger implements Interceptor {

        @Override

        public Response intercept(Chain chain) throws IOException {

            Request original = chain.request();

            HttpUrl url=original.url().newBuilder()

                    .addQueryParameter("source","android")

                    .build();

            //添加请求头

            Request request = original.newBuilder()

                    .url(url)

                    .build();

            return chain.proceed(request);

        }

    }

}

-------------------------------------------------------

model  层

public interface IModel {

    void getData(Map<String,String> map);

}

-----------------------

public class Model implements IModel{

    private BasePresenter presenter;

    public Model(BasePresenter presenter) {

        this.presenter = presenter;

    }

    @Override

    public void getData(Map<String, String> map) {

        Flowable<MsgBean<List<DataBean>>> flowable = RetrofitUtils.getInstance().getApiService().getGoods(map);

        presenter.get(flowable);

    }

}

------------------------------------

加减器 主类

public class AddDeleteView extends LinearLayout {

    private OnAddDelClickListener listener;

    private 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 AddDeleteView(Context context) {

        this(context,null);

    }

    public AddDeleteView(Context context, AttributeSet attrs) {

        this(context, attrs,0);

    }

    public AddDeleteView(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_add_delete,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.AddDeleteViewStyle_left_text);

        String rightText = typedArray.getString(R.styleable.AddDeleteViewStyle_right_text);

        String middleText = typedArray.getString(R.styleable.AddDeleteViewStyle_middle_text);

        int color = typedArray.getColor(R.styleable.AddDeleteViewStyle_left_text_color, Color.RED);

        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;

    }

}

------------------------------------------------

presenter  层

public class BasePresenter implements IPresenter{

    private IView iView;

    private DisposableSubscriber<MsgBean<List<DataBean>>> subscriber;

    public void attachView(IView iView){

        this.iView=iView;

    }

    @Override

    public void getData(Map<String, String> map) {

        Model model = new Model(this);

        model.getData(map);

    }

    public void detachView(){

        if(subscriber!=null){

            //如果该资源已被处理,则可一次性返回true。如果没有被处理返回false

            if(!subscriber.isDisposed()){

                subscriber.dispose();

            }

        }

    }

    public void get(Flowable<MsgBean<List<DataBean>>> flowable){

        subscriber = flowable.subscribeOn(Schedulers.io())

                .observeOn(AndroidSchedulers.mainThread())

                .subscribeWith(new DisposableSubscriber<MsgBean<List<DataBean>>>() {

                    @Override

                    public void onNext(MsgBean<List<DataBean>> dataBeanMsgBean) {

                        List<GroupBean> groupBeen = new ArrayList<>();

                        List<List<ChildBean>> childBeen = new ArrayList<>();

                        List<DataBean> data = dataBeanMsgBean.getData();

                        for (DataBean i : data) {

                            GroupBean groupBean = new GroupBean(i.getSellerName(), false);

                            groupBeen.add(groupBean);

                            List<DataBean.ListBean> list = i.getList();

                            List<ChildBean> ls = new ArrayList<>();

                            for (DataBean.ListBean w : list) {

                                String[] split = w.getImages().split("\\|");

                                ChildBean childBean = new ChildBean(w.getTitle(), split[0], w.getPrice(), 1, false, false);

                                ls.add(childBean);

                            }

                            childBeen.add(ls);

                        }

                        iView.OnSuccess(groupBeen,childBeen);

                    }

                    @Override

                    public void onError(Throwable t) {

                    }

                    @Override

                    public void onComplete() {

                    }

                });

    }

}

---------------------------------------------

public interface IPresenter {

    void getData(Map<String,String> map);

}

---------------------------------------------

Fresco图片初始化

public class App extends Application{

    @Override

    public void onCreate() {

        super.onCreate();

        Fresco.initialize(this);

    }

}

--------------------------------------

view 层

public interface IView {

    void OnSuccess(List<GroupBean> groupBeen,List<List<ChildBean>> childBeen);

    void OnFailed(Exception e);

}

--------------------------------------

主类

public class MainActivity extends AppCompatActivity implements IView{

    private static final String TAG = "gepeng";

    @BindView(R.id.all_chekbox)

    public CheckBox allCheckbox;

    @BindView(R.id.exListView)

    ExpandableListView exListView;

    @BindView(R.id.total_price)

    TextView totalPrice;

    @BindView(R.id.total_number)

    TextView totalnumber;

    List<GroupBean> groupBeen = new ArrayList<>();

    List<List<ChildBean>> childBeen = new ArrayList<>();

    private ExpandableAdapter expandableAdapter;

    private boolean flagedit = true;

    private BasePresenter basePresenter;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

        //RX  retrofit

        basePresenter = new BasePresenter();

        basePresenter.attachView(this);

        Map<String, String> map1 = new HashMap<>();

        map1.put("uid", "3802");

        basePresenter.getData(map1);

        //获取二级列表适配器

        expandableAdapter = new ExpandableAdapter(MainActivity.this, groupBeen, childBeen);

        exListView.setAdapter(expandableAdapter);

        for (int i = 0; i < expandableAdapter.getGroupCount(); i++) {

            exListView.expandGroup(i);

        }

        exListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {

            @Override

            public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {

                return true;

            }

        });

    }

    //计算和数量总价

    public void changesum(List<List<ChildBean>> childBeen) {

        int count = 0;

        double sum = 0;

        for (List<ChildBean> i1 : childBeen) {

            for (int r = 0; r < i1.size(); r++) {

                boolean childCb1 = i1.get(r).isChildCb();

                if (childCb1) {

                    double price = i1.get(r).getPrice();

                    int num = i1.get(r).getNum();

                    sum += price * num;

                    count++;

                }

            }

        }

        totalPrice.setText("¥" + sum);

        totalnumber.setText("共有商品:" + count + "件");

    }

    @OnClick({R.id.edit, R.id.all_chekbox})

    public void onViewClicked(View view) {

        switch (view.getId()) {

            case R.id.edit:

                for (List<ChildBean> i1 : childBeen) {

                    for (int r = 0; r < i1.size(); r++) {

                        i1.get(r).setBtn(flagedit);

                    }

                }

                flagedit = !flagedit;

                expandableAdapter.notifyDataSetChanged();

                break;

            case R.id.all_chekbox:

                boolean checked = allCheckbox.isChecked();

                for (GroupBean i : groupBeen) {

                    i.setGropuCb(checked);

                }

                for (List<ChildBean> i1 : childBeen) {

                    for (int r = 0; r < i1.size(); r++) {

                        i1.get(r).setChildCb(checked);

                    }

                }

                expandableAdapter.notifyDataSetChanged();

                changesum(childBeen);

                break;

        }

    }

    @Override

    public void OnSuccess(List<GroupBean> groupBeen, List<List<ChildBean>> childBeen) {

        this.groupBeen.addAll(groupBeen);

        this.childBeen.addAll(childBeen);

        for (int i = 0; i < expandableAdapter.getGroupCount(); i++) {

            exListView.expandGroup(i);

        }

        expandableAdapter.notifyDataSetChanged();

    }

    @Override

    public void OnFailed(Exception e) {

    }

    @Override

    protected void onDestroy() {

        super.onDestroy();

        if(basePresenter!=null){

            basePresenter.detachView();

        }

    }

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: