天天看點

商品詳情頁+tablayout

圖檔加載使用Fresco

https://www.fresco-cn.org/docs/supported-uris.html

進行初始化配置

顯示xml

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:gravity="center"
        android:text="商品詳情" />

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/img2"
        android:layout_width="match_parent"
        android:layout_height="300dp" />

    <TextView
        android:id="@+id/title2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="描述" />

    <TextView
        android:id="@+id/price2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="原價" />

    <TextView
        android:id="@+id/bargainPrice2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="特價"
        android:textColor="#f00" />

    <Button
        android:id="@+id/addCar2"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:background="#f00"
        android:text="加入購物車"
        android:textColor="#ffffff"
        android:textSize="20dp" />
           

DetaiActivity

public class DetaiActivity extends AppCompatActivity {

    private TabLayout tab_layout;
    private ViewPager vp;
    private List<String> tab_list;
    private List<Fragment> fr_list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detai);
        tab_layout = (TabLayout) findViewById(R.id.tab_layout);
        vp = (ViewPager) findViewById(R.id.vp);
        //設定tab的值
        initTab();


        //設定擴充卡
        vp.setAdapter(new TabAdapter(getSupportFragmentManager()));
        //進行關聯
        tab_layout.setupWithViewPager(vp);
        //顯示的頁數
        vp.setOffscreenPageLimit(fr_list.size());
    }

    //擴充卡
    class TabAdapter extends FragmentPagerAdapter {


        public TabAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public CharSequence getPageTitle(int position) {

            return tab_list.get(position);
        }

        @Override
        public Fragment getItem(int position) {

            return fr_list.get(position);
        }

        @Override
        public int getCount() {


            return fr_list.size();
        }


    }

    private void initTab() {
        tab_list = new ArrayList<>();
        tab_list.add("商品");
        tab_list.add("詳情");
        tab_list.add("評論");
        fr_list = new ArrayList<>();
        //存放的是資料類型是Fragment
        fr_list.add(new Fr_shangpin());
        fr_list.add(new Fr_xiangqing());
        fr_list.add(new Fr_pinglun());

    }

}
           

activity顯示tablayout界面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="wangxuewei.bwie.com.mon.detail.DetaiActivity">

    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#f00"
        app:tabGravity="fill"
        app:tabIndicatorColor="#FFD700"
        app:tabMode="fixed"
        app:tabSelectedTextColor="#ffffff"
        app:tabTextColor="@color/colorPrimary" />

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v4.view.ViewPager>
</LinearLayout>
           

DetailModel

public class DetailModel {

    public void getAddCarData(String url, Map<String, String> map, final DetailPresenterAPI detailPresenterAPI) {
        OkHttpUtils.getInstance().okGet(url, map, new CallBack() {
            @Override
            public void onSuccess(String json) {

                Gson gson = new Gson();
                CarBean carBean = gson.fromJson(json, CarBean.class);


                detailPresenterAPI.addSuccess(carBean);
            }

            @Override
            public void onFailed(String err) {
                detailPresenterAPI.addFailed(err);
            }
        });
    }

    public void getDetailData(String url, Map<String, String> map, final DetailPresenterAPI2 detailPresenterAPI) {
        OkHttpUtils.getInstance().okGet(url, map, new CallBack() {
            @Override
            public void onSuccess(String json) {
                Gson gson = new Gson();
                GoodsBean goodsBean = gson.fromJson(json, GoodsBean.class);

                detailPresenterAPI.detailSuccess(goodsBean);
            }

            @Override
            public void onFailed(String err) {
                detailPresenterAPI.detailFailed(err);
            }
        });
    }


}
           

DetailPresenter

public class DetailPresenter {

    private DetailViewAPI detailViewAPI;
    private Context context;
    private final DetailModel detailModel;

    public DetailPresenter(DetailViewAPI detailViewAPI, Context context) {
        this.detailViewAPI = detailViewAPI;
        this.context = context;
        detailModel = new DetailModel();
    }

    public void getCarData(String url, String uid, String pid) {
        Map<String, String> map = new HashMap<>();
        map.put("source", "android");
        map.put("uid", uid);
        map.put("pid", pid);
        detailModel.getAddCarData(url, map, new DetailPresenterAPI() {
            @Override
            public void addSuccess(CarBean carBean) {
                detailViewAPI.onAddSuccess(carBean);
            }

            @Override
            public void addFailed(String e) {
                detailViewAPI.onAddFailed(e);
            }

        });

    }

    public void getDetailData(String url, String pid) {
        Map<String, String> map = new HashMap<>();
        map.put("source", "android");
        map.put("pid", pid);
        detailModel.getDetailData(url, map, new DetailPresenterAPI2() {
            @Override
            public void detailSuccess(GoodsBean goodsBean) {
                detailViewAPI.onDetailSuccess(goodsBean);
            }

            @Override
            public void detailFailed(String e) {
                detailViewAPI.onDetailFailed(e);
            }
        });
    }


}
           

DetailPresenterAPI

public interface DetailPresenterAPI {

    void addSuccess(CarBean carBean);

    void addFailed(String e);

}
           

DetailPresenterAPI2

public interface DetailPresenterAPI2 {

    void detailSuccess(GoodsBean goodsBean);

    void detailFailed(String e);


}
           

DetailViewAPI

public interface DetailViewAPI {

    void onAddSuccess(CarBean carBean);

    void onAddFailed(String e);

    void onDetailSuccess(GoodsBean goodsBean);

    void onDetailFailed(String e);

}
           

Fr_shangpin

public class Fr_shangpin extends Fragment implements DetailViewAPI {

    String u = "https://www.zhaoapi.cn/product/getProductDetail";
    String u2 = "https://www.zhaoapi.cn/product/addCart";
    private List<GoodsBean.DataBean> list = new ArrayList<>();
    private DetailPresenter detailPresenter;
    private TextView title;
    private TextView price;
    private TextView bargainPrice;
    private Button addCar;
    private SimpleDraweeView img;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View inflate = inflater.inflate(R.layout.fr_shangpin, null);

        initView(inflate);
        return inflate;

    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        detailPresenter = new DetailPresenter(this, getContext());
        detailPresenter.getDetailData(u,  + "");
        clickLietener();
    }

    //點選事件
    private void clickLietener() {

        addCar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                detailPresenter.getCarData(u2,  + "",  + "");
                Toast.makeText(getContext(), "加購成功", Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void initView(View view) {
        img = view.findViewById(R.id.img2);
        title = view.findViewById(R.id.title2);
        price = view.findViewById(R.id.price2);
        bargainPrice = view.findViewById(R.id.bargainPrice2);
        addCar = view.findViewById(R.id.addCar2);

    }

    public void setView(GoodsBean.DataBean l) {

        title.setText(l.getTitle());
        price.setText(l.getPrice() + "");
        bargainPrice.setText(l.getBargainPrice() + "");
        String images = l.getImages();
        String[] split = images.split("\\|");
        Uri uri = Uri.parse(split[]);
        img.setImageURI(uri);
    }

    @Override
    public void onAddSuccess(CarBean carBean) {

    }

    @Override
    public void onAddFailed(String e) {

    }

    @Override
    public void onDetailSuccess(GoodsBean goodsBean) {
        setView(goodsBean.getData());
    }

    @Override
    public void onDetailFailed(String e) {

    }
}
           

CarBean

public class CarBean {

    /**
     * msg : 加購成功
     * code : 0
     */

    private String msg;
    private String code;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}
           

GoodsBean

public class GoodsBean {


    /**
     * msg :
     * seller : {"description":"我是商家3","icon":"http://120.27.23.105/images/icon.png","name":"商家3","productNums":999,"score":5,"sellerid":3}
     * code : 0
     * data : {"bargainPrice":5599,"createtime":"2017-10-10T17:30:32","detailUrl":"https://item.m.jd.com/product/4824715.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n12/jfs/t7768/184/1153704394/148460/f42e1432/599a930fN8a85626b.jpg!q70.jpg","itemtype":0,"pid":59,"price":5599,"pscid":40,"salenum":675,"sellerid":3,"subhead":"遊戲本選擇4G獨顯,拒絕掉幀】更新版IPS全高清防眩光顯示屏,WASD方向鍵顔色加持,三大出風口立體散熱!","title":"戴爾DELL靈越遊匣15PR-6648B GTX1050 15.6英寸遊戲筆記本電腦(i5-7300HQ 8G 128GSSD+1T 4G獨顯 IPS)黑"}
     */

    private String msg;
    private SellerBean seller;
    private String code;
    private DataBean data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public SellerBean getSeller() {
        return seller;
    }

    public void setSeller(SellerBean seller) {
        this.seller = seller;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class SellerBean {
        /**
         * description : 我是商家3
         * icon : http://120.27.23.105/images/icon.png
         * name : 商家3
         * productNums : 999
         * score : 5
         * sellerid : 3
         */

        private String description;
        private String icon;
        private String name;
        private int productNums;
        private int score;
        private int sellerid;

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getIcon() {
            return icon;
        }

        public void setIcon(String icon) {
            this.icon = icon;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getProductNums() {
            return productNums;
        }

        public void setProductNums(int productNums) {
            this.productNums = productNums;
        }

        public int getScore() {
            return score;
        }

        public void setScore(int score) {
            this.score = score;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }
    }

    public static class DataBean {
        /**
         * bargainPrice : 5599
         * createtime : 2017-10-10T17:30:32
         * detailUrl : https://item.m.jd.com/product/4824715.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends
         * images : https://m.360buyimg.com/n12/jfs/t7768/184/1153704394/148460/f42e1432/599a930fN8a85626b.jpg!q70.jpg
         * itemtype : 0
         * pid : 59
         * price : 5599
         * pscid : 40
         * salenum : 675
         * sellerid : 3
         * subhead : 遊戲本選擇4G獨顯,拒絕掉幀】更新版IPS全高清防眩光顯示屏,WASD方向鍵顔色加持,三大出風口立體散熱!
         * title : 戴爾DELL靈越遊匣15PR-6648B GTX1050 15.6英寸遊戲筆記本電腦(i5-7300HQ 8G 128GSSD+1T 4G獨顯 IPS)黑
         */

        private int bargainPrice;
        private String createtime;
        private String detailUrl;
        private String images;
        private int itemtype;
        private int pid;
        private int price;
        private int pscid;
        private int salenum;
        private int sellerid;
        private String subhead;
        private String title;

        public int getBargainPrice() {
            return bargainPrice;
        }

        public void setBargainPrice(int 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 getItemtype() {
            return itemtype;
        }

        public void setItemtype(int itemtype) {
            this.itemtype = itemtype;
        }

        public int getPid() {
            return pid;
        }

        public void setPid(int pid) {
            this.pid = pid;
        }

        public int getPrice() {
            return price;
        }

        public void setPrice(int price) {
            this.price = price;
        }

        public int getPscid() {
            return pscid;
        }

        public void setPscid(int pscid) {
            this.pscid = pscid;
        }

        public int getSalenum() {
            return salenum;
        }

        public void setSalenum(int salenum) {
            this.salenum = salenum;
        }

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