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

//加依赖
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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值