MVP+Retrofit+RxJava请求网络数据实现RecyclerView多条目展示
来源:互联网 发布:爱伦坡黑猫 知乎 编辑:程序博客网 时间:2024/05/18 02:39
先是请求网络数据的部分
public interface IBannerView { public void showBData(List<BannerBean.RetBean.ListBean.ChildListBean> bannerlist);}public interface IBannerModel { public void getBData(Observer observer);}public class BannerModel implements IBannerModel { @Override public void getBData(Observer observer) { OkHttpClient client=new OkHttpClient.Builder().build(); RetrofitManager.getInstance("http://api.svipmovie.com/front/",client) .setCreate(BannerUrl.class).getBanner() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(observer); }}public class BannerPresenter { IBannerView view; BannerModel model; List<BannerBean.RetBean.ListBean.ChildListBean> bannerlist=new ArrayList<>(); public BannerPresenter(IBannerView view) { this.view = view; model=new BannerModel(); } public void bpData(){ model.getBData(new Observer<BannerBean>(){ @Override public void onCompleted() { } @Override public void onError(Throwable e) { Log.i("------","onError()"+e.toString()); } @Override public void onNext(BannerBean bannerBean) { bannerlist.addAll(bannerBean.getRet().getList().get(0).getChildList()); view.showBData(bannerlist); Log.i("------","onNext()"+bannerlist); } }); }}
适配器中
public class RvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { Context context; List<BannerBean.RetBean.ListBean.ChildListBean> bannerlist; OnItemClickListener listener; public static final int TYPE_HEADER=0; public static final int TYPE_ONE=1; **List<View> listheader=new ArrayList<View>(); public void addheader(View view){ listheader.add(view); }** public interface OnItemClickListener{ public void OnItemClick(View view,int position,String id); } public void setOnItemClick(OnItemClickListener listener){ this.listener=listener; } public RvAdapter(Context context, List<BannerBean.RetBean.ListBean.ChildListBean> bannerlist) { this.context = context; this.bannerlist = bannerlist; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(viewType==TYPE_HEADER){ View view1 = View.inflate(context, R.layout.bn_item, null); return new BnViewHolder(view1); }else { View view2 = View.inflate(context, R.layout.rv_item, null); return new RvViewHolder(view2); } } @Override public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { //给banner赋值 if(holder instanceof BnViewHolder){ ArrayList<String> pic=new ArrayList<>(); for(int i=0;i<bannerlist.size();i++){ pic.add(bannerlist.get(i).getPic()); } ((BnViewHolder)holder).banner.setImages(pic); ((BnViewHolder)holder).banner.setImageLoader(new BnImageLoader()); ((BnViewHolder)holder).banner.start(); } if(holder instanceof RvViewHolder){ ((RvViewHolder)holder).sdv_rv.setImageURI(bannerlist.get(position).getPic()); ((RvViewHolder)holder).tv_rv.setText(bannerlist.get(position).getTitle()); } holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(listener!=null){ listener.OnItemClick(view,position,bannerlist.get(position).getDataId()); } } }); } @Override public int getItemCount() { return bannerlist!=null?bannerlist.size():0; } @Override public int getItemViewType(int position) { if(position < listheader.size()){ return TYPE_HEADER; }else { return TYPE_ONE; } } class RvViewHolder extends RecyclerView.ViewHolder{ SimpleDraweeView sdv_rv; TextView tv_rv; public RvViewHolder(View itemView) { super(itemView); sdv_rv=itemView.findViewById(R.id.sdv_rv); tv_rv=itemView.findViewById(R.id.tv_rv); } } //banner的ViewHolder class BnViewHolder extends RecyclerView.ViewHolder{ Banner banner; public BnViewHolder(View itemView) { super(itemView); banner=itemView.findViewById(R.id.banner); } }}
Activity中
public class MainActivity extends AppCompatActivity implements IBannerView { RvAdapter rvAdapter; private RecyclerView mRv; BannerPresenter bannerPresenter; List<BannerBean.RetBean.ListBean.ChildListBean> bannerlist=new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); bannerPresenter=new BannerPresenter(this); showBData(bannerlist); bannerPresenter.bpData(); } @Override public void showBData(List<BannerBean.RetBean.ListBean.ChildListBean> bannerlist) { LinearLayoutManager manager=new LinearLayoutManager(this); mRv.setLayoutManager(manager); rvAdapter=new RvAdapter(this,bannerlist); mRv.setAdapter(rvAdapter); **Banner banner=new Banner(this); rvAdapter.addheader(banner);** rvAdapter.setOnItemClick(new RvAdapter.OnItemClickListener() { @Override public void OnItemClick(View view, int position, String id) { Intent intent = new Intent(MainActivity.this, DetailsActivity.class); intent.putExtra("id",id);![这里写图片描述](http://img.blog.csdn.net/20171220193100505?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzQwMzk3MjM4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) startActivity(intent); } }); } private void initView() { mRv = (RecyclerView) findViewById(R.id.rv); }}
下面就是一些工具类了
public interface BannerUrl { @GET("homePageApi/homePage.do") Observable<BannerBean> getBanner();}//Retrofit二次封装public class RetrofitManager { private Retrofit mRetrofit; private String baseUrl; OkHttpClient client;//有关拦截器 private static RetrofitManager mRetrofitManager; private RetrofitManager(){} private RetrofitManager(String baseUrl, OkHttpClient client){ this.baseUrl=baseUrl; this.client=client;//有关拦截器 initRetrofit(); } public static synchronized RetrofitManager getInstance(String baseUrl, OkHttpClient client){//有关拦截器 if (mRetrofitManager == null){ mRetrofitManager = new RetrofitManager(baseUrl,client); } return mRetrofitManager; } private void initRetrofit() { mRetrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(client)//有关拦截器 .build(); } public <T> T setCreate(Class<T> reqServer){ return mRetrofit.create(reqServer); }
布局的啦
主布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorPrimary" tools:context="com.example.lastexam.MainActivity"> <!--<com.youth.banner.Banner--> <!--android:id="@+id/banner"--> <!--android:layout_width="match_parent"--> <!--android:layout_height="200dp"></com.youth.banner.Banner>--> <android.support.v7.widget.RecyclerView android:id="@+id/rv" android:layout_marginTop="10dp" android:layout_width="match_parent" android:layout_height="match_parent" ></android.support.v7.widget.RecyclerView> <EditText android:id="@+id/ss" android:layout_width="350dp" android:background="@drawable/yuanjiao" android:layout_height="50dp" android:layout_centerHorizontal="true" android:hint="一念天堂" android:textColor="@android:color/white" /></RelativeLayout>
banner的
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.youth.banner.Banner android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="200dp"></com.youth.banner.Banner></LinearLayout>
下面的recyclerview的
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.facebook.drawee.view.SimpleDraweeView android:layout_marginTop="10dp" android:id="@+id/sdv_rv" android:layout_width="600dp" android:layout_height="200dp" /> <TextView android:id="@+id/tv_rv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="111111" android:layout_gravity="center_horizontal" android:textColor="@android:color/white" /></LinearLayout>
依赖
compile 'com.youth.banner:banner:1.4.9' compile 'com.android.support:recyclerview-v7:26.1.0' compile 'com.facebook.fresco:fresco:0.11.0' compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.okhttp3:okhttp:3.1.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2' //若和观察者结合的话,需加上如下依赖: compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' compile 'io.reactivex:rxjava:1.0.14' compile 'io.reactivex:rxandroid:1.0.1' compile 'com.dou361.ijkplayer:jjdxm-ijkplayer:1.0.5'
阅读全文
0 0
- MVP+Retrofit+RxJava请求网络数据实现RecyclerView多条目展示
- MVP+retrofit和Rxjava请求数据+recyclerview展示
- MVP+RxJava+Retryfit+RecyclerView多条目展示
- MVP+Rxjava+Retrofit+Fresco网络请求数据
- Kotlin新语言使用RxJava+Retrofit请求网络数据+lambda表达式+RecyclerView展示+Glide展示图片
- MVP(Retrofit+RXJava)实现网络请求
- MVP+Rxjava+Fresco+Retrofit实现Recyclerview列表展示
- MVP框架+RXJava+reftorfit请求网络数据+XRecycleView多条目展示(banner轮播+条目展示、刷新加载)、点击事件+fresco图片加载
- 使用MVP+Retrofit+RxJava 图片加载使用Fresco 做网络请求并展示数据
- MVP+Retrofit+RecyclerView实现加载网络数据
- 简单的MVP+Retrofit+RxJava请求网络数据(一)
- MVP框架使用Retrofit+Rxjava请求网络数据
- listview网络请求数据并实现多条目展示
- RxJava+MVP+轮播+retrofit+条目点击+recyclerView
- MVP模式实现网络请求数据并添加到列表(Rxjava+Retrofit)
- RxJava结合Retrofit使用 自定义封装类结合泛型 请求网络数据+Fresco+RecyclerView+MVP分层
- Retrofit网络请求+Recyclerview展示数据+Fresco显示图片
- Retrofit网络请求+Recyclerview展示数据+Fresco显示图片
- ViewPager网络加载图片
- 控制反转与依赖注入
- 聊聊设计师的六大瓶颈期(上)
- pca程序
- WEB前端的优化规则
- MVP+Retrofit+RxJava请求网络数据实现RecyclerView多条目展示
- 建议
- adb工具包使用介绍 adb工具包安装使用方法
- 设计模式-建造者模式
- SQL查询的时候能查询到结果,但是将SQL语句改为存储过程的时候就提示表不存在
- Android Source Code Menu
- 机器翻译
- eclipse 代码提示:configure build path
- HDU 2553.N皇后问题