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