MVP+Fresco+Retrofit实现的一个简单的适配器类

来源:互联网 发布:跟矮个子女生啪啪知乎 编辑:程序博客网 时间:2024/05/21 10:27
初始化一个接口
public class Api {    public static  final  String BASE_PATH = "https://api.tianapi.com";}
初始化Fresco的
public class MyApp extends Application{    public static Context context;    @Override    public void onCreate() {        super.onCreate();        Fresco.initialize(this);        context=this;    }}

创建一个Retrofit接口以便于用来网络连接用
public interface Services {    /**     * 结合Retrofit+RxJava     * http://service.meiyinkeqiu.com/service/ads/cptj     * @param     * @return     */    @GET("/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10")    Observable<Homes> getJson();}

创建一个适配器来进行布局加载数据
public class Myadapter extends RecyclerView.Adapter<Myadapter.MyHolder> {    List<Homes.NewslistBean> newslistBeen;    Context context;    SimpleDraweeView image;    public Myadapter(Context context, List<Homes.NewslistBean> newslistBeen) {        this.context = context;        this.newslistBeen = newslistBeen;    }    @Override    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {        MyHolder holder = new MyHolder(LayoutInflater.from(context).inflate(R.layout.item_home, parent, false));        return holder;    }    @Override    public void onBindViewHolder(MyHolder holder, int position) {        holder.textView.setText(newslistBeen.get(position).getTitle());        Uri uri =  Uri.parse(newslistBeen.get(position).getPicUrl());        DraweeController controller = Fresco.newDraweeControllerBuilder()                .setUri(uri)                .setAutoPlayAnimations(true)                .build();        image.setController(controller);    }    @Override    public int getItemCount() {        return newslistBeen.size();    }    class MyHolder extends RecyclerView.ViewHolder {        TextView textView;        public MyHolder(View itemView) {            super(itemView);            image = itemView.findViewById(R.id.image);            textView = itemView.findViewById(R.id.text);        }    }

创建一个Adaper 的model的接口
public interface Imodel {    void getAdapter();}

在实现model类里面进行网络请求等操作
public class Mymodel implements Imodel{    private DataOverListener mDataOverListener;    @Override    public void getAdapter() {        Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.BASE_PATH).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();        Services services = retrofit.create(Services.class);        Observable<Homes> observable = services.getJson();        observable.subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer<Homes>() {                    @Override                    public void onCompleted() {                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onNext(Homes myBean) {                        Myadapter myadapter = new Myadapter(MyApp.context, myBean.getNewslist());                        mDataOverListener.dataOver(myadapter);                    }                });    }    public interface DataOverListener{        void dataOver(Myadapter myadapter);    }    public void setmDataOverListener(DataOverListener mDataOverListener) {        this.mDataOverListener = mDataOverListener;    }}

在presenter里面进行一些简单的连接View 和 model操作
public class MyPresenter {    Mymodel imodel;    Iview iview;    public MyPresenter(Iview iview) {        this.iview = iview;        this.imodel = new Mymodel();    }    public void start(){        imodel.getAdapter();        imodel.setmDataOverListener(new Mymodel.DataOverListener() {            @Override            public void dataOver(Myadapter myadapter) {                iview.adapter(myadapter);            }        });    }}

创建一个View的接口
public interface Iview {    void adapter(Myadapter myadapter);}
下面这个就是mainactivity里面进行的一些操作
public class MainActivity extends AppCompatActivity implements Iview{    RecyclerView recyclerView;    MyPresenter presenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        recyclerView = (RecyclerView) findViewById(R.id.recycler);        presenter = new MyPresenter(MainActivity.this);        presenter.start();    }    @Override    public void adapter(Myadapter myadapter) {        recyclerView.setLayoutManager(new GridLayoutManager(MyApp.context,2));        recyclerView.setAdapter(myadapter);    }}


还有下面要用到的一些依赖什么的
compile 'com.android.support:appcompat-v7:23.4.0'compile 'com.facebook.fresco:fresco:0.11.0'compile 'com.squareup.retrofit2:retrofit:2.0.1'compile 'com.squareup.retrofit2:converter-gson:2.0.1'compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'compile 'io.reactivex:rxandroid:1.1.0'compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'compile 'com.android.support:mediarouter-v7:25.0.0'compile 'com.android.support:appcompat-v7:25.0.0'compile 'com.android.support:recyclerview-v7:25.0.0'
子布局
<com.facebook.drawee.view.SimpleDraweeView    android:id="@+id/image"    android:layout_width="200dp"    android:layout_height="200dp" /><TextView    android:id="@+id/text"    android:layout_width="wrap_content"    android:layout_height="wrap_content" />