1.添加依赖
compile 'com.android.support:recyclerview-v7:23.0.1'
compile 'com.facebook.fresco:fresco:1.5.0'
compile 'org.greenrobot:eventbus:3.1.1'
compile 'org.greenrobot:greendao:3.2.2'
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-rxjava:2.1.0'
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
2.布局文件(主布局)
<?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"
tools:context="com.example.pinshop.view.MainActivity">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rcy_homePage"/>
</LinearLayout>
(子布局)
<?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="400dp"
android:orientation="vertical"
android:id="@+id/ll">
<com.facebook.drawee.view.SimpleDraweeView
android:layout_width="300dp"
android:layout_height="300dp"
android:id="@+id/fresco_homepage"
/>
<TextView
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/text_homepage"
android:text="这是一件商品,对很好的商品。"/>
<TextView
android:layout_width="160dp"
android:layout_height="wrap_content"
android:textColor="#f00"
android:text="16.00"
android:id="@+id/price_homepage"/>
</LinearLayout>
关键的部分就在于代码的显示
net包
1.地址
public class Api {
public static final String BASE_URL="http://apiv4.yangkeduo.com/";
public static final String HOME_PAGE="v5/newlist?page=1&size=20&ver=1512745500001&pdduid=3470667255";
}
2.地址拼接(这是三个界面的地址,我们只需要用到第一个)
public interface ServiceApi {
//首页
@GET(Api.HOME_PAGE)
Observable<HomePageBean> homeList();
//详情
@GET("goods/{id}?pdduid=3470667255")
Observable<DetailsPageBean> detailList(@Path("id") String goods_id);
//两条评价
@GET("reviews/{id}?page=1&size=2&label=1&is_back=1&pdduid=3470667255")
Observable<Evaluate> evaluate(@Path("id") String goods_id);
//全部评价
@GET("reviews/{id}/list?page=1&size=20&pdduid=3470667255")
Observable<AllEvaluteBean> allList(@Path("id") String goods_id);
}
3.请求成功或者失败回调的方法
public interface OnNetListener<T> {
public void onSuccess(T t);
public void onFailure(Exception e);
}
4.okhttp请求+retrofit+RxJava的帮助类
public class RetrofitHelper {
public static OkHttpClient okHttpClient;
public static ServiceApi stringApi;
static {
//加载动态代码块
initOkHttpClient();
}
public static void initOkHttpClient() {
if(okHttpClient==null){
synchronized (RetrofitHelper.class){
if(okHttpClient==null){
okHttpClient = new OkHttpClient();
}
}
}
}
//实例化stringApi对象
public static ServiceApi serviceApi(){
if(stringApi==null){
synchronized (RetrofitHelper.class){
if(stringApi==null){
stringApi= OnCreate(ServiceApi.class,Api.BASE_URL);
}
}
}
return stringApi;
}
//创建一个方法,实例化retrofit对象
public static <T> T OnCreate(Class<T> tClass,String url){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.client(okHttpClient)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
return retrofit.create(tClass);
}
}
这个接口需要的bean类
public class HomePageBean {
private long ver;
private int server_time;
private List<GoodsListBean> goods_list;
public long getVer() {
return ver;
}
public void setVer(long ver) {
this.ver = ver;
}
public int getServer_time() {
return server_time;
}
public void setServer_time(int server_time) {
this.server_time = server_time;
}
public List<GoodsListBean> getGoods_list() {
return goods_list;
}
public void setGoods_list(List<GoodsListBean> goods_list) {
this.goods_list = goods_list;
}
public static class GoodsListBean {
private int normal_price;
private int cnt;
private String thumb_url;
private int event_type;
private String country;
private String short_name;
private GroupBean group;
private String allowed_region;
private int time;
private String image_url;
private int market_price;
private String goods_name;
private String hd_thumb_url;
private int quantity;
private boolean is_onsale;
private int goods_id;
private int is_app;
private int mall_id;
private int region_limit;
public int getNormal_price() {
return normal_price;
}
public void setNormal_price(int normal_price) {
this.normal_price = normal_price;
}
public int getCnt() {
return cnt;
}
public void setCnt(int cnt) {
this.cnt = cnt;
}
public String getThumb_url() {
return thumb_url;
}
public void setThumb_url(String thumb_url) {
this.thumb_url = thumb_url;
}
public int getEvent_type() {
return event_type;
}
public void setEvent_type(int event_type) {
this.event_type = event_type;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getShort_name() {
return short_name;
}
public void setShort_name(String short_name) {
this.short_name = short_name;
}
public GroupBean getGroup() {
return group;
}
public void setGroup(GroupBean group) {
this.group = group;
}
public String getAllowed_region() {
return allowed_region;
}
public void setAllowed_region(String allowed_region) {
this.allowed_region = allowed_region;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public String getImage_url() {
return image_url;
}
public void setImage_url(String image_url) {
this.image_url = image_url;
}
public int getMarket_price() {
return market_price;
}
public void setMarket_price(int market_price) {
this.market_price = market_price;
}
public String getGoods_name() {
return goods_name;
}
public void setGoods_name(String goods_name) {
this.goods_name = goods_name;
}
public String getHd_thumb_url() {
return hd_thumb_url;
}
public void setHd_thumb_url(String hd_thumb_url) {
this.hd_thumb_url = hd_thumb_url;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public boolean isIs_onsale() {
return is_onsale;
}
public void setIs_onsale(boolean is_onsale) {
this.is_onsale = is_onsale;
}
public int getGoods_id() {
return goods_id;
}
public void setGoods_id(int goods_id) {
this.goods_id = goods_id;
}
public int getIs_app() {
return is_app;
}
public void setIs_app(int is_app) {
this.is_app = is_app;
}
public int getMall_id() {
return mall_id;
}
public void setMall_id(int mall_id) {
this.mall_id = mall_id;
}
public int getRegion_limit() {
return region_limit;
}
public void setRegion_limit(int region_limit) {
this.region_limit = region_limit;
}
public static class GroupBean {
/**
* customer_num : 2
* price : 5990
*/
private int customer_num;
private int price;
public int getCustomer_num() {
return customer_num;
}
public void setCustomer_num(int customer_num) {
this.customer_num = customer_num;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
}
}
接下来就是MVP的展示
model层
接口
public interface IHomePageModel {
public void getHomePage(OnNetListener<HomePageBean> onNetListener);
}
实现类
public class HomePageModel implements IHomePageModel {
@Override
public void getHomePage(final OnNetListener<HomePageBean> onNetListener) {
ServiceApi serviceApi = RetrofitHelper.serviceApi();
serviceApi.homeList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<HomePageBean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.getMessage();
}
@Override
public void onNext(HomePageBean homePageBean) {
onNetListener.onSuccess(homePageBean);
}
});
}
}
p层
public class HomePagePresenter {
public IMainActivity iMainActivity;
public IHomePageModel iHomePageModel;
public HomePagePresenter(IMainActivity iMainActivity) {
this.iMainActivity = iMainActivity;
iHomePageModel = new HomePageModel();
}
/**
* 获取主界面的方法
*/
public void getHomePage(){
iHomePageModel.getHomePage(new OnNetListener<HomePageBean>() {
@Override
public void onSuccess(HomePageBean homePageBean) {
List<HomePageBean.GoodsListBean> goods_list = homePageBean.getGoods_list();
iMainActivity.onShowHomePage(goods_list);
}
@Override
public void onFailure(Exception e) {
}
});
}
}
view层
public interface IMainActivity {
public void onShowHomePage(List<HomePageBean.GoodsListBean> homeList);
}
public class MainActivity extends AppCompatActivity implements IMainActivity{
public RecyclerView recyclerView;
public HomePagePresenter homePagePresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.rcy_homePage);
//注册fresco
Fresco.initialize(this);
homePagePresenter = new HomePagePresenter(this);
homePagePresenter.getHomePage();
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(gridLayoutManager);
}
/**
* 展示主界面 信息
* @param homeList
*/
@Override
public void onShowHomePage(List<HomePageBean.GoodsListBean> homeList) {
HomePageAdapter homePageAdapter = new HomePageAdapter(homeList, this);
recyclerView.setAdapter(homePageAdapter);
homePageAdapter.setOnItemClickListener(new HomePageAdapter.OnItemClickListener() {
@Override
public void onItemClieck(String str) {
Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
intent.putExtra("key",str);
startActivity(intent);
}
});
}
}
RecycleView的适配器
public class HomePageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public List<HomePageBean.GoodsListBean> list;
public Context context;
public HomePageAdapter(List<HomePageBean.GoodsListBean> list, Context context) {
this.list = list;
this.context = context;
}
//设置一个变量
public OnItemClickListener onItemClickListener;
//3.定义一个方法
public void setOnItemClickListener(OnItemClickListener onItemClickListener){
this.onItemClickListener = onItemClickListener;
}
//1.首先自定义一个接口
public interface OnItemClickListener {
public void onItemClieck(String str);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.homepage_item,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
HomePageBean.GoodsListBean goodsListBean = list.get(position);
MyViewHolder myViewHolder = (MyViewHolder) holder;
myViewHolder.fresco.setImageURI(goodsListBean.getImage_url());
myViewHolder.price.setText(goodsListBean.getMarket_price()+"");
myViewHolder.title.setText(goodsListBean.getShort_name());
final int goods_id = goodsListBean.getGoods_id();
myViewHolder.ll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onItemClickListener.onItemClieck(goods_id+"");
}
});
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
SimpleDraweeView fresco;
TextView title,price;
LinearLayout ll;
public MyViewHolder(View itemView) {
super(itemView);
fresco = itemView.findViewById(R.id.fresco_homepage);
title = itemView.findViewById(R.id.text_homepage);
price = itemView.findViewById(R.id.price_homepage);
ll = itemView.findViewById(R.id.ll);
}
}
}