MVP+RxJava+Retryfit+RecyclerView多条目展示

来源:互联网 发布:去马赛克软件下载 编辑:程序博客网 时间:2024/06/08 05:26
//加依赖compile 'io.reactivex:rxandroid:1.1.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 'com.google.code.gson:gson:2.8.1'compile 'com.android.support:recyclerview-v7:26.+'compile 'com.squareup.okhttp3:okhttp:3.9.0'compile 'com.squareup.okio:okio:1.13.0'compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'compile 'com.facebook.fresco:fresco:0.12.0'compile 'com.youth.banner:banner:1.4.9'compile 'com.github.bumptech.glide:glide:3.7.0'Api
public class Api {    //http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=vedio    public static final String PATH = "http://result.eolinker.com/";    }
Apiservice
public interface Apiservice {    @GET("iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=vedio")    Observable<MyBean> getdatas();   }



//IView
public interface IView {    void showList(List<MyBean.DataBean> list);    void showError(String e);}


public interface OnRequestListener {    void OnSuccess(List<MyBean.DataBean> list);    void OnError(String e);}



public interface IModel {    void RequestData(String url,OnRequestListener onRequestListener);}


public class Model implements IModel{    @Override    public void RequestData(String url, final OnRequestListener onRequestListener) {        //retrofit网络请求        Retrofit retrofit = new Retrofit                .Builder()                .baseUrl(url)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .build();        Apiservice apiService = retrofit.create(Apiservice.class);        //结合rxjava        Observable<MyBean> getdatas = apiService.getdatas();        getdatas.subscribeOn(Schedulers.io())             .observeOn(AndroidSchedulers.mainThread())             .subscribe(new Observer<MyBean>() {                 @Override                 public void onCompleted() {                 }                 @Override                 public void onError(Throwable e) {                   onRequestListener.OnError(e.getMessage().toString());                 }                 @Override                 public void onNext(MyBean myBean) {                     List<MyBean.DataBean> song_list = myBean.data;                     onRequestListener.OnSuccess(song_list);                 }             });    }}


public interface IPresenter {    void loadList(String url);}


public class Presenter implements IPresenter {    private IView iView;    private IModel iModel;    public Presenter(IView iView) {        this.iView = iView;        iModel = new Model();    }    @Override    public void loadList(String url) {      iModel.RequestData(url, new OnRequestListener() {          @Override          public void OnSuccess(List<MyBean.DataBean> list) {              iView.showList(list);          }          @Override          public void OnError(String e) {            iView.showError(e);          }      });    }}



public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    private Context context;    private List<MyBean.DataBean> list;    private final int BANNER_TYPE = 0,TITLE_TYPE = 1;    public MyAdapter(Context context, List<MyBean.DataBean> list) {        this.context = context;        this.list = list;    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {       if (viewType==BANNER_TYPE){           View view = LayoutInflater.from(context).inflate(R.layout.item_01, parent, false);           return new ViewHolder1(view);       }        View view = LayoutInflater.from(context).inflate(R.layout.item_02, parent, false);        return new ViewHolder2(view);    }    @Override    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {        int type = getItemViewType(position);        switch (type){            case BANNER_TYPE:                ((ViewHolder1)holder).banner.setImageLoader(new ImageLoader() {                    @Override                    public void displayImage(Context context, Object path, ImageView imageView) {                        Glide.with(context).load(list.get(position).image_url).into(imageView);                    }                });                ((ViewHolder1)holder).banner.setImages(list.subList(0,3));                ((ViewHolder1)holder).banner.start();              break;            case TITLE_TYPE:                ((ViewHolder2)holder).img.setImageURI(list.get(position).image_url);                ((ViewHolder2)holder).title.setText(list.get(position).title);                ((ViewHolder2)holder).content.setText(list.get(position).content);                break;        }    }    @Override    public int getItemCount() {        return list.size();    }    @Override    public int getItemViewType(int position) {        if (position==0){            return BANNER_TYPE;        }        return TITLE_TYPE;    }    public class ViewHolder1 extends RecyclerView.ViewHolder{        public Banner banner;        public ViewHolder1(View itemView) {            super(itemView);            banner=itemView.findViewById(R.id.banner);        }    }    public class ViewHolder2 extends RecyclerView.ViewHolder{        public SimpleDraweeView img;        public TextView title,content;        public ViewHolder2(View itemView) {            super(itemView);           img= itemView.findViewById(R.id.item_img);            title=itemView.findViewById(R.id.title);            content=itemView.findViewById(R.id.content);        }    }}



public class SecondActivity extends AppCompatActivity implements IView{    private RecyclerView recycler;    private XRecyclerView xrecycler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);//        xrecycler = (XRecyclerView) findViewById(R.id.xrecycler);        recycler = (RecyclerView) findViewById(R.id.recycler);        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(SecondActivity.this);        recycler.setLayoutManager(linearLayoutManager);        Presenter presenter = new Presenter(this);        presenter.loadList(Api.PATH);    }    @Override    public void showList(List<MyBean.DataBean> list) {        MyAdapter myAdapter = new MyAdapter(SecondActivity.this, list);        recycler.setAdapter(myAdapter);    }    @Override    public void showError(String e) {    }}

//主页面布局
<android.support.v7.widget.RecyclerView    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@+id/recycler"></android.support.v7.widget.RecyclerView>item_01布局
<com.youth.banner.Banner    android:layout_width="match_parent"    android:layout_height="200dp"    android:id="@+id/banner"></com.youth.banner.Banner>


item_02布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:fresco="http://schemas.android.com/apk/res-auto"    android:orientation="horizontal" android:layout_width="match_parent"    android:layout_height="wrap_content">    <com.facebook.drawee.view.SimpleDraweeView        android:id="@+id/item_img"        android:layout_width="150dp"        android:layout_height="150dp"        android:layout_margin="8dp"        fresco:failureImage="@mipmap/ic_launcher" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical"        android:gravity="center">        <TextView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:id="@+id/title"/>        <TextView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:id="@+id/content"            android:maxLines="2"/>    </LinearLayout></LinearLayout>

阅读全文
0 0
原创粉丝点击