MVP+RxJava+Retryfit+RecyclerView多条目展示
来源:互联网 发布:去马赛克软件下载 编辑:程序博客网 时间:2024/06/08 05:26
//加依赖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'Apipublic class Api { //http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=vedio public static final String PATH = "http://result.eolinker.com/"; }Apiservicepublic interface Apiservice { @GET("iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=vedio") Observable<MyBean> getdatas(); }
//IViewpublic 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布局item_02布局<com.youth.banner.Banner android:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/banner"></com.youth.banner.Banner><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>
阅读全文
0 0
- MVP+RxJava+Retryfit+RecyclerView多条目展示
- MVP+Rxjava+Retryfit+分页加载+RecyclerView展示,解析以集合开头的json数据
- MVP+Rxjava+Retryfit+分页加载+RecyclerView展示,解析以集合开头的json数据
- MVP+Retrofit+RxJava请求网络数据实现RecyclerView多条目展示
- RecyclerView多条目展示
- RecyclerView多条目展示
- MVP+RXJava+Retryfit使用post解析
- RecyclerView的多条目展示
- RxJava+MVP+轮播+retrofit+条目点击+recyclerView
- MVP框架+RXJava+reftorfit请求网络数据+XRecycleView多条目展示(banner轮播+条目展示、刷新加载)、点击事件+fresco图片加载
- MVP+Rxjava+Fresco+Retrofit实现Recyclerview列表展示
- Retrofit2 + RxJava + Okhttp + RecyclerView用MVP架构展示数据
- MVP+retrofit和Rxjava请求数据+recyclerview展示
- MVp+RXJava+Retrofit+RecyclerView展示首页和详情页
- recyclerView多条目展示,ArgbEvaluator颜色渐变
- OkHttp+RecyclerView多条目展示数据
- MVP泛型+xRecyclerView+Retrofit+OkHttp+RxJava多条目,横向
- MVP操作RecyclerView多条目SpringView,OKHttp封装请求网络
- C++ 二叉树建立,遍历
- android 倒计时控件布局
- ValueError: invalid literal for int() with base 10: '7.8000000e+02'
- Android 第三方登录
- 7.ES6 变量的解构赋值 (Destructuring)
- MVP+RxJava+Retryfit+RecyclerView多条目展示
- 缺少的字符串-LintCode
- C++/C++11中命名空间(namespace)的使用
- HTML5游戏设计与制作
- 位运算总结即技巧
- 22.Struts2_CRUD操作(2)添加和修改
- Lintcode2尾部的0
- padding-top的值用的是百分比,实际显示的不是父元素高度的百分比,而是宽度的百分比!margin-top同理
- Teach English in lixiang jiaoyu