MVP框架使用Fretiofit获取网络数据使用xrecycleview实现上拉加载下拉刷新
2017-11-08 19:31
531 查看
<?xml version="1.0" encoding="utf-8"?> <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" tools:context="com.example.myrefiofit.MainActivity"> <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/merv" android:layout_width="match_parent" android:layout_height="match_parent"> </com.jcodecraeer.xrecyclerview.XRecyclerView> </RelativeLayout>布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="match_parent"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/im" android:layout_width="200dp" android:layout_height="200dp" fresco:roundedCornerRadius="15dp" /> <TextView android:id="@+id/frg_tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="2222" android:layout_alignParentTop="true" android:layout_marginTop="43dp" /> </LinearLayout>Myapp
package com.example.myrefiofit.app; import android.app.Application; import com.facebook.drawee.backends.pipeline.Fresco; public class Myapp extends Application{ @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }model
package com.example.myrefiofit.model; import rx.Observer; public interface IMovemodel { public void refit(int start, int count, Observer observer); }model
package com.example.myrefiofit.model; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; /** * Retrofit Rxjava. */ public class Movemodel implements IMovemodel{ @Override public void refit(int start, in 4000 t count, Observer observer) { String baseUrl = "https://api.douban.com/v2/movie/"; Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); // 步骤5:创建 网络请求接口 的实例 Movise request = retrofit.create(Movise.class); request.getTopMovie(start,count) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } }model
package com.example.myrefiofit.model; import com.example.myrefiofit.bean.MovieEntity; import retrofit2.http.GET; import retrofit2.http.Query; import rx.Observable; /** * 注解 */ public interface Movise { @GET("top250") Observable<MovieEntity> getTopMovie(@Query("start") int start, @Query("count") int count); }view
package com.example.myrefiofit.view; import com.example.myrefiofit.bean.MovieEntity; public interface Movisview { public void initdata(MovieEntity list); public int getStart(); public int getCount(); }p
package com.example.myrefiofit.presenter; public interface Ipresenter<T> { public void attch(T view); public void detch(); }p
package com.example.myrefiofit.presenter; import android.content.Context; import android.util.Log; import com.example.myrefiofit.bean.MovieEntity; import com.example.myrefiofit.model.Movemodel; import com.example.myrefiofit.view.Movisview; import java.lang.ref.SoftReference; import rx.Observer; /** * presenter */ public class MovisePresenter implements Ipresenter<Movisview> { Context context; Movemodel model; SoftReference<Movisview> soview; MovieEntity list; public MovisePresenter(Context context, Movisview view) { list=new MovieEntity(); this.context = context; model=new Movemodel(); attch (view); } @Override public void attch(Movisview view) { soview =new SoftReference<Movisview>(view); } @Override public void detch() { soview.clear(); } public void movsi(){ int start = soview.get().getStart(); int count = soview.get().getCount(); model.refit(start, count, new Observer() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Object o) { list= (MovieEntity) o; soview.get().initdata(list); } }); } }baseactivity基类
package com.example.myrefiofit; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import com.example.myrefiofit.presenter.Ipresenter; /** * 基类 */ public abstract class Baseactivity <T extends Ipresenter> extends AppCompatActivity { T presenter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); createpresenter(); } public abstract void createpresenter(); @Override protected void onDestroy() { super.onDestroy(); presenter.detch(); } }Mainactivity
package com.example.myrefiofit; import android.os.Bundle; import android.os.Handler; import android.support.v7.widget.LinearLayoutManager; import com.example.myrefiofit.adapter.Myadapter; import com.example.myrefiofit.bean.MovieEntity; import com.example.myrefiofit.presenter.MovisePresenter; import com.example.myrefiofit.view.Movisview; import com.jcodecraeer.xrecyclerview.XRecyclerView; import java.util.ArrayList; import java.util.List; public class MainActivity extends Baseactivity<MovisePresenter> implements Movisview{ XRecyclerView merv; int start=0; int count=10; List<MovieEntity.SubjectsBean> list; Handler handler=new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initview(); presenter.movsi(); } //加载布局 private void initview() { list=new ArrayList<>(); merv= (XRecyclerView) findViewById(R.id.merv); LinearLayoutManager mar=new LinearLayoutManager(this); merv.setLayoutManager(mar); merv.setLoadingMoreEnabled(true); } @Override public void createpresenter() { presenter=new MovisePresenter(this,this); } //上拉加载下拉刷新 @Override public void initdata(MovieEntity li) { list=li.getSubjects(); Myadapter adapter=new Myadapter(this,list); merv.setAdapter(adapter); merv.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { handler.postDelayed(new Runnable() { @Override public void run() { start++; presenter.movsi();; merv.refreshComplete(); } },3000); } @Override public void onLoadMore() { handler.postDelayed(new Runnable() { @Override public void run() { count=count+10; presenter.movsi(); merv.refreshComplete(); } },3000); } }); } @Override public int getStart() { return start; } @Override public int getCount() { return count; } }Adapter
package com.example.myrefiofit.adapter; import android.content.Context; import android.net.Uri; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.myrefiofit.R; import com.example.myrefiofit.bean.MovieEntity; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; public class Myadapter extends RecyclerView.Adapter<Myadapter.ViewHolder>{ Context context; List<MovieEntity.SubjectsBean> list; public Myadapter(Context context, List<MovieEntity.SubjectsBean> list) { this.context = context; this.list = list; } @Override public Myadapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=View.inflate(context,R.layout.item,null); ViewHolder holder=new ViewHolder(view); return holder; } //fresoc图片加载 @Override public void onBindViewHolder(Myadapter.ViewHolder holder, int position) { Uri uri=Uri.parse(list.get(position).getImages().getLarge()); DraweeController controller = Fresco.newDraweeControllerBuilder() .setUri(uri) .setAutoPlayAnimations(true) .build(); holder.s_img.setController(controller); // Glide.with(context).load(sd.getSubjects().get(position).getImages().getLarge()).into(holder.im); holder.ttt.setText(list.get(position).getTitle()); } @Override public int getItemCount() { return list.size(); } public class ViewHolder extends RecyclerView.ViewHolder { SimpleDraweeView s_img; TextView ttt; public ViewHolder(View itemView) { super(itemView); s_img=itemView.findViewById(R.id.im); ttt=itemView.findViewById(R.id.frg_tv); } } }
相关文章推荐
- 在Android Studio上使用GSON+VOLLEY,秒处理网络数据成集合。感受框架的力量。搭配RecyclerView和SwipeRefreshLayout,实现底端加载更多,下拉刷新。
- PullToRefreshGridView实现上拉加载和下拉刷新,使用Volley框架解析数据
- 使用AFinal框架实现HTTP请求从网络获取数据
- 使用MVP注册登录模块+封装的OKhttp,拦截器+QQ第三方登录+RecyclerView+SpringView上拉加载下拉刷新网络数据
- 使用jsoup获取网页数据实现加载更多和下拉刷新(二)
- Android实现异步从网络加载图片列表和上拉加载更多、下拉刷新列表(使用xListView框架实现)
- android快速开发框架--快速实现 页面 加载中 加载失败 无数据等状态以及下拉刷新和自动加载
- 网络通信框架Volley之一——获取String数据和图片的异步加载
- 使用MVP+Retrofit+RxJava 图片加载使用Fresco 做网络请求并展示数据
- 小程序 使用view实现下拉刷新,上拉加载数据
- MVP实现用Retrofit请求网络数据Fresco加载图片,Recyclerview CheckBox显示并实现全选删除
- andriod开发利用MVP实现登录注册和加载网络数据
- 使用MVP+Retrofit+RxJava 图片加载使用Fresco 做网络请求并展示数据
- 使用BottomTabBar实现底部导航,MVP网络框架,retrofit解析
- ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法,先贴上主方法的代码:
- 带有侧滑菜单的+ 通过retrofit获取数据,通过fresco框架加载图片,使用TabLayout + ViewPage + Fragment + ListView 显示数据
- MVP框架+RXJava+reftorfit请求网络数据+XRecycleView多条目展示(banner轮播+条目展示、刷新加载)、点击事件+fresco图片加载
- SwipeRefreshLayout完美实现ListView网络数据上拉加载以及下拉刷新
- jquery mobile关于使用iscroll动态加载数据实现下拉刷新和上拉的效果
- PullToRefreshListView上拉加载,下拉刷新 刷新网络数据 简单实现ListView显示网络数据