//效果图
//依赖
compile 'io.reactivex.rxjava2:rxjava:+' compile 'io.reactivex.rxjava2:rxandroid:+' compile 'com.squareup.retrofit2:adapter-rxjava2:+' compile 'com.squareup.retrofit2:retrofit:+' compile 'com.squareup.retrofit2:converter-gson:+' compile 'com.youth.banner:banner:1.4.9' compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' compile 'com.android.support:recyclerview-v7:25.0.0' compile 'com.jakewharton:butterknife:6.1.0'
//权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
//Model层
public interface IModel { }
public class MyModel implements IModel{ //查询 public Observable<MyBean> select(){ MyApi myApi = RetrofitManager.getinstance().create(MyApi.class); return myApi.select(); } }//View层public interface IView { }
public interface MyView extends IView{ void Success(MyBean myBean); void Faild(Throwable throwable); }//Presenter层public abstract class IPresenter<T extends IView> { protected T view; public IPresenter(T view) { this.view = view; init(); } protected abstract void init(); }package yanzhixiong20170108.yanzhixiong20180111.presenter; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; import yanzhixiong20170108.yanzhixiong20180111.model.MyModel; import yanzhixiong20170108.yanzhixiong20180111.model.bean.MyBean; import yanzhixiong20170108.yanzhixiong20180111.view.MyView; /** * author:Created by YanZhiXiong on 2018/1/11. */ public class MyPresenter extends IPresenter<MyView>{ private MyModel myModel; public MyPresenter(MyView view) { super(view); } @Override protected void init() { myModel=new MyModel(); } //查询 public void select(){ Observable<MyBean> select = myModel.select(); select.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<MyBean>() { @Override public void accept(MyBean myBean) throws Exception { view.Success(myBean); } } , new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { view.Faild(throwable); } } ); } }//Apipublic interface MyApi { @GET("ad/getAd") Observable<MyBean> select(); }//工具类package yanzhixiong20170108.yanzhixiong20180111.utils; import java.util.concurrent.TimeUnit; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; /** * author:Created by YanZhiXiong on 2018/1/11. */ public class RetrofitManager { private static final String URL="http://120.27.23.105/"; private static Retrofit mRetrofit; private static class Holder{ private static final RetrofitManager instance=new RetrofitManager(URL); } public static RetrofitManager getinstance() { return Holder.instance; } public RetrofitManager(String url) { mRetrofit=buildRetrofit(); } //OkHttpClient private static OkHttpClient buildOkHttpClient(){ return new OkHttpClient.Builder() .connectTimeout(10000, TimeUnit.MILLISECONDS) .build(); } //Retrofit private static Retrofit buildRetrofit(){ return new Retrofit.Builder() .client(buildOkHttpClient()) .baseUrl(URL) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); } public <T> T create(Class<T> tClass){ return mRetrofit.create(tClass); } }//图片加载器package yanzhixiong20170108.yanzhixiong20180111.utils; import android.content.Context; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.youth.banner.loader.ImageLoader; /** * author:Created by YanZhiXiong on 2018/1/11. */ public class GlidApp extends ImageLoader{ @Override public void displayImage(Context context, Object path, ImageView imageView) { Glide.with(context).load(path).into(imageView); } }//主视图package yanzhixiong20170108.yanzhixiong20180111; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import butterknife.ButterKnife; import butterknife.InjectView; import yanzhixiong20170108.yanzhixiong20180111.adapter.MyAdapter; import yanzhixiong20170108.yanzhixiong20180111.model.bean.MyBean; import yanzhixiong20170108.yanzhixiong20180111.presenter.MyPresenter; import yanzhixiong20170108.yanzhixiong20180111.view.MyView; public class MainActivity extends AppCompatActivity implements MyView{ @InjectView(R.id.rlv) RecyclerView rlv; private MyPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); presenter = new MyPresenter(this); rlv.setLayoutManager(new LinearLayoutManager(this)); presenter.select(); } @Override public void Success(MyBean myBean) { rlv.setAdapter(new MyAdapter(MainActivity.this,myBean)); } @Override public void Faild(Throwable throwable) { } }//适配器 (主适配器)package yanzhixiong20170108.yanzhixiong20180111.adapter; import android.content.Context; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import com.youth.banner.Banner; import java.util.ArrayList; import java.util.List; import yanzhixiong20170108.yanzhixiong20180111.R; import yanzhixiong20170108.yanzhixiong20180111.model.bean.MyBean; import yanzhixiong20170108.yanzhixiong20180111.utils.GlidApp; /** * author:Created by YanZhiXiong on 2018/1/11. */ public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ Context context; MyBean myBean; public MyAdapter(Context context, MyBean myBean) { this.context = context; this.myBean = myBean; } @Override public int getItemViewType(int position) { if (position==0){ return 0; }else if (position==1){ return 1; }else { return 2; } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType==0){ View inflate = View.inflate(context, R.layout.item_ban,null); BanViewHolder banViewHolder = new BanViewHolder(inflate); return banViewHolder; }else if (viewType==1){ View inflate = View.inflate(context, R.layout.item_rlv,null); RlvViewHolder rlvViewHolder = new RlvViewHolder(inflate); return rlvViewHolder; }else { View inflate = View.inflate(context, R.layout.item_list,null); ListViewHolder listViewHolder = new ListViewHolder(inflate); return listViewHolder; } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (position==0){ BanViewHolder banview= (BanViewHolder) holder; List<MyBean.DataBean> data = myBean.getData(); final List<String> bannerUrl=new ArrayList<String>(); for (int i = 0; i <data.size() ; i++) { bannerUrl.add(data.get(i).getIcon()); } banview.item_ban.setImageLoader(new GlidApp()).setImages(bannerUrl).start(); }else if (position==1){ RlvViewHolder rlvview= (RlvViewHolder) holder; rlvview.item_rlv.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,true)); RlvAdapter rlvadapter=new RlvAdapter(context,myBean.getMiaosha()); rlvview.item_rlv.setAdapter(rlvadapter); }else { ListViewHolder listview= (ListViewHolder) holder; listview.item_list.setLayoutManager(new GridLayoutManager(context,2,GridLayoutManager.VERTICAL,true)); ListAdapter1 listadapter=new ListAdapter1(context,myBean.getTuijian()); listview.item_list.setAdapter(listadapter); } } @Override public int getItemCount() { return 3; } class BanViewHolder extends RecyclerView.ViewHolder{ Banner item_ban; public BanViewHolder(View itemView) { super(itemView); item_ban=itemView.findViewById(R.id.item_ban); } } class RlvViewHolder extends RecyclerView.ViewHolder{ RecyclerView item_rlv; public RlvViewHolder(View itemView) { super(itemView); item_rlv=itemView.findViewById(R.id.item_rlv); } } class ListViewHolder extends RecyclerView.ViewHolder{ RecyclerView item_list; public ListViewHolder(View itemView) { super(itemView); item_list=itemView.findViewById(R.id.item_list); } } }//条目适配器-1package yanzhixiong20170108.yanzhixiong20180111.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.bumptech.glide.Glide; import yanzhixiong20170108.yanzhixiong20180111.R; import yanzhixiong20170108.yanzhixiong20180111.model.bean.MyBean; /** * author:Created by YanZhiXiong on 2018/1/11. */ public class RlvAdapter extends RecyclerView.Adapter<RlvAdapter.rlvViewHolder>{ Context context; MyBean.MiaoshaBean miaoshaBean; public RlvAdapter(Context context, MyBean.MiaoshaBean miaoshaBean) { this.context = context; this.miaoshaBean = miaoshaBean; } @Override public rlvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View inflate = View.inflate(context, R.layout.rlvview,null); rlvViewHolder rlvViewHolder = new rlvViewHolder(inflate); return rlvViewHolder; } @Override public void onBindViewHolder(rlvViewHolder holder, int position) { String images = miaoshaBean.getList().get(position).getImages(); String[] split = images.split("\\|"); Glide.with(context).load(split[0]).into(holder.rlv_img); } @Override public int getItemCount() { return miaoshaBean.getList().size(); } class rlvViewHolder extends RecyclerView.ViewHolder{ ImageView rlv_img; public rlvViewHolder(View itemView) { super(itemView); rlv_img=itemView.findViewById(R.id.rlv_img); } } }//条目适配器-2package yanzhixiong20170108.yanzhixiong20180111.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.bumptech.glide.Glide; import yanzhixiong20170108.yanzhixiong20180111.R; import yanzhixiong20170108.yanzhixiong20180111.model.bean.MyBean; /** * author:Created by YanZhiXiong on 2018/1/11. */ public class ListAdapter1 extends RecyclerView.Adapter<ListAdapter1.listViewHolder>{ Context context; MyBean.TuijianBean tuijianBean; public ListAdapter1(Context context, MyBean.TuijianBean tuijianBean) { this.context = context; this.tuijianBean = tuijianBean; } @Override public listViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View inflate = View.inflate(context, R.layout.listitem, null); listViewHolder listViewHolder = new listViewHolder(inflate); return listViewHolder; } @Override public void onBindViewHolder(listViewHolder holder, int position) { String images = tuijianBean.getList().get(position).getImages(); String[] split = images.split("\\|"); Glide.with(context).load(split[0]).into(holder.listimg); } @Override public int getItemCount() { return tuijianBean.getList().size(); } class listViewHolder extends RecyclerView.ViewHolder{ ImageView listimg; public listViewHolder(View itemView) { super(itemView); listimg=itemView.findViewById(R.id.listimg); } } }//主布局<android.support.v7.widget.RecyclerView android:id="@+id/rlv" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>//主布局里创建视图布局-1<com.youth.banner.Banner android:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/item_ban" ></com.youth.banner.Banner>//主布局里创建视图布局-2<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/item_rlv" ></android.support.v7.widget.RecyclerView>//主布局里创建视图布局-3<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/item_list" ></android.support.v7.widget.RecyclerView>//子布局布局-1<ImageView android:layout_width="70dp" android:layout_height="70dp" android:id="@+id/rlv_img" />//子布局布局-2<ImageView android:layout_width="300dp" android:layout_height="300dp" android:id="@+id/listimg" />