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