andriod——Retrofit+Fresco+MVP+RxJAVA列表展示商品点击跳转此详情页面




首先导入权限<uses-permission android:name="android.permission.INTERNET" />
然后导入依赖
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

    compile 'com.android.support:recyclerview-v7:26.1.0'
    compile 'com.facebook.fresco:fresco:0.11.0'
    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    compile 'com.squareup.okhttp3:okhttp:3.1.2'
    compile 'com.squareup.retrofit2:converter-gson:2.0.2'
    //若和观察者结合的话,需加上如下依赖:
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    compile 'io.reactivex:rxjava:1.0.14'
    compile 'io.reactivex:rxandroid:1.0.1'
    compile 'com.youth.banner:banner:1.4.9'

}

不要忘了设置name
android:name=".utils.App"
评价的adapter——PJAdapter
package com.example.week02.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.example.week02.R;
import com.example.week02.bean.Pj_Bean;

import java.util.List;


public class PJAdapter extends BaseAdapter {
    Context context;
    List<Pj_Bean.DataBean> pjlist;

    public PJAdapter(Context context, List<Pj_Bean.DataBean> pjlist) {
        this.context = context;
        this.pjlist = pjlist;
    }

    @Override
    public int getCount() {
        return pjlist.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        PJHolder holder;
        if(convertView==null){
            convertView=View.inflate(context, R.layout.pj_item,null);
            holder=new PJHolder();
            holder.pj_tv=convertView.findViewById(R.id.pj_tv);
            holder.name_tv=convertView.findViewById(R.id.name_tv);
            convertView.setTag(holder);
        }else{
            holder= (PJHolder) convertView.getTag();
        }
            holder.name_tv.setText(pjlist.get(position).getName());
            holder.pj_tv.setText(pjlist.get(position).getComment());
        return convertView;
    }
    class PJHolder{
        TextView name_tv;
        TextView pj_tv;
    }
}
首页的
adapter——SYAdapter
package com.example.week02.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.week02.R;
import com.example.week02.bean.Sy_bean;
import com.facebook.drawee.view.SimpleDraweeView;

import java.util.List;

public class SYAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    Context context;
    List<Sy_bean.GoodsListBean> sylist;
    OnItemClickListener listener;
    public SYAdapter(Context context, List<Sy_bean.GoodsListBean> sylist) {
        this.context = context;
        this.sylist = sylist;
    }



    public interface OnItemClickListener{
        public void OnItemClick(View view, int position, String name, String pic, String price);
    }

    public void setOnItemClick(OnItemClickListener listener){
        this.listener=listener;
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view=View.inflate(context,R.layout.sy_item,null);
        return new SYHolder(view);
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
        ((SYHolder)holder).sdv.setImageURI(sylist.get(position).getImage_url());
        ((SYHolder)holder).sy_tv.setText(sylist.get(position).getGoods_name());
        ((SYHolder)holder).sy_price.setText("¥"+sylist.get(position).getGroup().getPrice());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(listener!=null){
                    listener.OnItemClick(view,position,((SYHolder)holder).sy_tv.getText().toString(),sylist.get(position).getImage_url(),((SYHolder)holder).sy_price.getText().toString());
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return sylist!=null?sylist.size():0;
    }
    class SYHolder extends RecyclerView.ViewHolder{
        SimpleDraweeView sdv;
        TextView sy_tv;
        TextView sy_price;

        public SYHolder(View itemView) {
            super(itemView);
            sdv=itemView.findViewById(R.id.sdv);
            sy_tv=itemView.findViewById(R.id.sy_tv);
            sy_price=itemView.findViewById(R.id.sy_price);
        }
    }

}

Bean
新品列表:
http://apiv3.yangkeduo.com/v5/newlist?page=1&size=20&ver=1512745500001&pdduid=3470667255

产品详情页面接口:
http://apiv4.yangkeduo.com/v5/goods/202517471?pdduid=3470667255

店铺推荐接口
http://apiv4.yangkeduo.com/recommendation/mall?goods_id=202517471&pdduid=3470667255

产品评论接口
http://apiv4.yangkeduo.com/reviews/202517471?page=1&size=2&label=1&is_back=1&pdduid=3470667255

model——BNDataModel
package com.example.week02.model;


import com.example.week02.utils.RetrofitManager;
import com.example.week02.utils.Url;

import okhttp3.OkHttpClient;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class BNDataModel implements IBNDataModel{

    @Override
    public void getBNData(String goods_id,Observer observer) {
        OkHttpClient client=new OkHttpClient.Builder().build();
        RetrofitManager.getInstance("http://apiv4.yangkeduo.com/",client)
                .setCreate(Url.class).getPj(goods_id).observeOn(AndroidSchedulers
                .mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(observer);
    }
}

model——IBNDataModel
package com.example.week02.model;
import rx.Observer;

public interface IBNDataModel {
    public void getBNData(String goods_id, Observer observer);
}

model——IPJDataModel
package com.example.week02.model;
import rx.Observer;

public interface IPJDataModel {
    public void getPJData(String id, Observer observer);
}

model——ISYDataModel
package com.example.week02.model;

import rx.Observer;
public interface ISYDataModel {
    public void getSYData(Observer observer);
}

model——PJDataModel
package com.example.week02.model;

import com.example.week02.utils.RetrofitManager;
import com.example.week02.utils.Url;

import okhttp3.OkHttpClient;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class PJDataModel implements IPJDataModel{

    @Override
    public void getPJData(String id,Observer observer) {
        OkHttpClient client=new OkHttpClient.Builder().build();
        RetrofitManager.getInstance("http://apiv4.yangkeduo.com/",client)
                .setCreate(Url.class)
                .getPjl(id)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(observer);
    }
}

model——SYDataModel
package com.example.week02.model;

import com.example.week02.utils.RetrofitManager;
import com.example.week02.utils.Url;

import okhttp3.OkHttpClient;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class SYDataModel implements ISYDataModel{

    @Override
    public void getSYData(Observer observer) {
        OkHttpClient client=new OkHttpClient.Builder().build();
        RetrofitManager.getInstance("http://apiv3.yangkeduo.com/",client)
                .setCreate(Url.class)
                .getSy().observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(observer);
    }
}

presenter——BNPresenter
package com.example.week02.presenter;

import android.util.Log;
import com.example.week02.bean.Bn_Bean;
import com.example.week02.model.BNDataModel;
import com.example.week02.view.IBNDataView;
import java.util.ArrayList;
import java.util.List;
import rx.Observer;

public class BNPresenter {
    BNDataModel model;
    IBNDataView view;
    List<Bn_Bean.SkuBean> bnlist=new ArrayList<>();
    public BNPresenter(IBNDataView view) {
        this.view = view;
        model=new BNDataModel();
    }
    public void ppData(){
        String goods_id=view.getBnId();
        model.getBNData(goods_id,new Observer<Bn_Bean>(){
            @Override
            public void onCompleted() {
            }
            @Override
            public void onError(Throwable e) {
                Log.i("111111banner","onError......");
            }
            @Override
            public void onNext(Bn_Bean bn_bean) {
                bnlist.addAll(bn_bean.getSku());
                view.bnShowData(bnlist);
                Log.i("111111banner","onNext"+bnlist);
            }
        });
    }
}

presenter——PJPresenter
package com.example.week02.presenter;

import android.util.Log;
import com.example.week02.bean.Pj_Bean;
import com.example.week02.model.PJDataModel;
import com.example.week02.view.IPJDataView;
import java.util.ArrayList;
import java.util.List;
import rx.Observer;

public class PJPresenter {
    PJDataModel model;
    IPJDataView view;
    List<Pj_Bean.DataBean> pjlist=new ArrayList<>();

    public PJPresenter(IPJDataView view) {
        this.view = view;
        model=new PJDataModel();
    }
    public void ppData(){
        String id=view.getId();
        model.getPJData(id,new Observer<Pj_Bean>(){

            @Override
            public void onCompleted() {
            }
            @Override
            public void onError(Throwable e) {
                Log.i("111111p","onError");
            }
            @Override
            public void onNext(Pj_Bean pj_bean) {
                pjlist.addAll(pj_bean.getData());
                view.pjShowData(pjlist);
            }
        });
    }
}

presenter——SYPresenter
package com.example.week02.presenter;

import android.util.Log;
import com.example.week02.bean.Sy_bean;
import com.example.week02.model.SYDataModel;
import com.example.week02.view.ISYDataView;
import java.util.ArrayList;
import java.util.List;
import rx.Observer;

public class SYPresenter {
    SYDataModel model;
    ISYDataView view;
    List<Sy_bean.GoodsListBean> sylist=new ArrayList<>();
    public SYPresenter(ISYDataView view) {
        this.view = view;
        model=new SYDataModel();
    }
    public void spData(){
        model.getSYData(new Observer<Sy_bean>(){

            @Override
            public void onCompleted() {
            }
            @Override
            public void onError(Throwable e) {
                Log.i("111111p","onError");
            }
            @Override
            public void onNext(Sy_bean sy_bean) {
                sylist.addAll(sy_bean.getGoods_list());
                view.showSYData(sylist);
            }
        });
    }
}

utils——App
package com.example.week02.utils;
import android.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

utils——BnImageLoader
package com.example.week02.utils;

import android.content.Context;
import android.net.Uri;
import android.widget.ImageView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.youth.banner.loader.ImageLoader;

public class BnImageLoader extends ImageLoader{
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        Uri uri = Uri.parse((String) path);
        imageView.setImageURI(uri);
    }
    public ImageView createImageView(Context context) {
        //使用fresco,需要创建它提供的ImageView,当然你也可以用自己自定义的具有图片加载功能的ImageView
        SimpleDraweeView simpleDraweeView=new SimpleDraweeView(context);
        return simpleDraweeView;
    }
}

utils——RetrofitManager
package com.example.week02.utils;

import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

public class RetrofitManager {
    private Retrofit mRetrofit;
    private String baseUrl;
    OkHttpClient client;//有关拦截器
    private static RetrofitManager mRetrofitManager;
    private RetrofitManager(){}
    private RetrofitManager(String baseUrl, OkHttpClient client){
        this.baseUrl=baseUrl;
        this.client=client;//有关拦截器
        initRetrofit();
    }
    public static synchronized RetrofitManager getInstance(String baseUrl,OkHttpClient client){//有关拦截器
        if (mRetrofitManager == null){
            mRetrofitManager = new RetrofitManager(baseUrl,client);
        }
        return mRetrofitManager;
    }

    private void initRetrofit() {
        mRetrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .client(client)//有关拦截器
                .build();
    }

    public <T> T setCreate(Class<T> reqServer){
        return mRetrofit.create(reqServer);
    }
}

utils——Url
package com.example.week02.utils;

import com.example.week02.bean.Bn_Bean;
import com.example.week02.bean.Pj_Bean;
import com.example.week02.bean.Sy_bean;
import retrofit2.http.GET;
import retrofit2.http.Path;
import rx.Observable;

public interface Url {

    @GET("v5/goods/{goods_id}?pdduid=3470667255")
    Observable<Bn_Bean> getPj(@Path("goods_id") String goods_id);

    @GET("reviews/{id}?page=1&size=10&label=1&is_back=1&pdduid=3470667255")
    Observable<Pj_Bean> getPjl(@Path("id") String id);

    @GET("v5/newlist?page=1&size=20&ver=1512745500001&pdduid=3470667255")
    Observable<Sy_bean> getSy();
}

view——IBNDataView
package com.example.week02.view;

import com.example.week02.bean.Bn_Bean;
import java.util.List;

public interface IBNDataView {
    public void bnShowData(List<Bn_Bean.SkuBean> bnlist);
    public String getBnId();
}

view——IPJDataView
package com.example.week02.view;

import com.example.week02.bean.Pj_Bean;
import java.util.List;

public interface IPJDataView {
    public void pjShowData(List<Pj_Bean.DataBean> pjlist);
    public String getId();
}

view——ISYDataView
package com.example.week02.view;

import com.example.week02.bean.Sy_bean;
import java.util.List;

public interface ISYDataView {
    public void showSYData(List<Sy_bean.GoodsListBean> sylist);
}

MainActivity
package com.example.week02;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.example.week02.adapter.SYAdapter;
import com.example.week02.bean.Sy_bean;
import com.example.week02.presenter.SYPresenter;
import com.example.week02.view.ISYDataView;

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

public class MainActivity extends AppCompatActivity implements ISYDataView {
    SYAdapter syAdapter;
    private RecyclerView mRv;
    List<Sy_bean.GoodsListBean> sylist=new ArrayList<>();
    SYPresenter syPresenter;
    String id;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        syPresenter=new SYPresenter(this);
        showSYData(sylist);
        syPresenter.spData();
    }
    @Override
    public void showSYData(final List<Sy_bean.GoodsListBean> sylist) {
        GridLayoutManager manager=new GridLayoutManager(this,2);
        mRv.setLayoutManager(manager);
        syAdapter=new SYAdapter(this,sylist);
        mRv.setAdapter(syAdapter);
        syAdapter.setOnItemClick(new SYAdapter.OnItemClickListener() {
            @Override
            public void OnItemClick(View view, int position, String name, String pic, String price) {
                id=sylist.get(position).getGoods_id()+"";
                Intent intent = new Intent(MainActivity.this,ShopActivity.class);
                intent.putExtra("id",id);
                intent.putExtra("name",name);
                intent.putExtra("pic",pic);
                intent.putExtra("price",price);
                startActivity(intent);
            }
        });
    }
    private void initView() {
        mRv = (RecyclerView) findViewById(R.id.rv);
    }
}

ShopActivity
package com.example.week02;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ListView;
import android.widget.TextView;
import com.example.week02.adapter.PJAdapter;
import com.example.week02.bean.Bn_Bean;
import com.example.week02.bean.Pj_Bean;
import com.example.week02.presenter.BNPresenter;
import com.example.week02.presenter.PJPresenter;
import com.example.week02.utils.BnImageLoader;
import com.example.week02.view.IBNDataView;
import com.example.week02.view.IPJDataView;
import com.youth.banner.Banner;
import java.util.ArrayList;
import java.util.List;

public class ShopActivity extends AppCompatActivity implements IPJDataView,IBNDataView {

    private Banner mbanner;
    private TextView mPriceName;
    private ListView d_pj_lv;
    PJPresenter pjPresenter;
    String name;
    List<Pj_Bean.DataBean> pjlist=new ArrayList<>();
    List<Bn_Bean.SkuBean> bnlist=new ArrayList<>();
    String pic;
    String price;
    String id;
    PJAdapter pjAdapter;
    BNPresenter bnPresenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details);
        initView();

        Intent intent=getIntent();
        name =intent.getStringExtra("name");
        pic=intent.getStringExtra("pic");
        price=intent.getStringExtra("price");

        id=intent.getStringExtra("id");
        initData();

        pjPresenter=new PJPresenter(this);
        pjShowData(pjlist);

        pjPresenter.ppData();
        bnPresenter=new BNPresenter(this);

        bnShowData(bnlist);
        bnPresenter.ppData();
    }

    private void initData() {

        mPriceName.setText(price+"\r\n"+name);
    }

    private void initView() {
        mbanner = (Banner) findViewById(R.id.mbanner);
        mPriceName = (TextView) findViewById(R.id.price_name);
        d_pj_lv = (ListView) findViewById(R.id.d_pj_lv);
    }

    @Override
    public void pjShowData(List<Pj_Bean.DataBean> pjlist) {
        pjAdapter=new PJAdapter(this,pjlist);
        d_pj_lv.setAdapter(pjAdapter);
    }

    @Override
    public String getId() {
        return id;
    }

    @Override
    public void bnShowData(List<Bn_Bean.SkuBean> bnlist) {

        ArrayList<String> pic=new ArrayList<>();
        for(int i=0;i<bnlist.size();i++){
            pic.add(bnlist.get(i).getThumb_url());
            Log.i("111111b",""+bnlist.get(i).getThumb_url());
        }
        mbanner.setImageLoader(new BnImageLoader());
        mbanner.setImages(pic);
        mbanner.start();
    }

    @Override
    public String getBnId() {
        return id;
    }
}

跳转到的页面
 
 <activity android:name=".ShopActivity"></activity>

activity_main.xml
<?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">
    <TextView
        android:text="新品"
        android:id="@+id/tv"
        android:textSize="25sp"
        android:gravity="center"
        android:textColor="@android:color/holo_red_dark"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="match_parent"
        android:layout_below="@+id/tv"
        android:layout_height="match_parent"
        ></android.support.v7.widget.RecyclerView>

</RelativeLayout>

activity_details.xml
<?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">
    <com.youth.banner.Banner
        android:id="@+id/mbanner"
        android:layout_width="match_parent"
        android:layout_height="230dp" />
    <TextView
        android:id="@+id/price_name"
        android:layout_width="match_parent"
        android:textSize="15sp"
        android:layout_height="wrap_content" />
    <LinearLayout
        android:layout_width="match_parent"
        android:background="@color/gainsboro"
        android:layout_height="5dp">

    </LinearLayout>
    <LinearLayout
        android:id="@+id/d_ll"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:gravity="center_vertical"
        android:layout_height="wrap_content">
        <TextView
            android:text="商品评价"
            android:textSize="20sp"
            android:layout_marginLeft="20dp"
            android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            />
        <TextView
            android:id="@+id/more"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="查看全部>"
            android:gravity="center"
            android:layout_weight="1"
            android:layout_marginLeft="200dp"
            />

    </LinearLayout>
    <ListView
        android:id="@+id/d_pj_lv"
        android:layout_marginLeft="20dp"
        android:layout_width="match_parent"
        android:layout_height="230dp"></ListView>
    <Button
        android:id="@+id/gwc"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:text="加入购物车"
        android:textSize="20sp"
        android:background="@color/crimson"
        />

</LinearLayout>

pj_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/name_tv"
        android:layout_width="match_parent"
        android:textSize="20sp"
        android:text="111111111"
        android:textColor="@color/colorAccent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/pj_tv"
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:textSize="15sp"
        android:text="111111111"
        android:layout_height="wrap_content" />

</LinearLayout>

sy_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_marginLeft="35dp"
    android:layout_height="match_parent">

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/sdv"
        android:layout_marginLeft="30dp"
        android:layout_width="200dp"
        android:layout_height="200dp" />
    <TextView
        android:id="@+id/sy_price"
        android:layout_marginLeft="30dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/sy_tv"
        android:layout_marginLeft="30dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


</LinearLayout>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值