XrecyclerView的展示包含上拉刷新下拉加载

1  导考试文件中的包
2  创建bean类
    //http://172.17.8.100/movieApi/movie/v1/findReleaseMovieList?page=1&count=20
public class MovieBean {
    private String message;
    private String status;
    private List<ResultBean> result;
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public List<ResultBean> getResult() {
        return result;
    }
    public void setResult(List<ResultBean> result) {
        this.result = result;
    }
    public static class ResultBean {
        private int followMovie;
        private int id;
        private String imageUrl;
        private String name;
        private int rank;
        private long releaseTime;
        private String releaseTimeShow;
        private String summary;
        @Override
        public String toString() {
            return "ResultBean{" +
                    "followMovie=" + followMovie +
                    ", id=" + id +
                    ", imageUrl='" + imageUrl + '\'' +
                    ", name='" + name + '\'' +
                    ", rank=" + rank +
                    ", releaseTime=" + releaseTime +
                    ", releaseTimeShow='" + releaseTimeShow + '\'' +
                    ", summary='" + summary + '\'' +
                    '}';
        }
        public int getFollowMovie() {
            return followMovie;
        }
        public void setFollowMovie(int followMovie) {
            this.followMovie = followMovie;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getImageUrl() {
            return imageUrl;
        }
        public void setImageUrl(String imageUrl) {
            this.imageUrl = imageUrl;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getRank() {
            return rank;
        }
        public void setRank(int rank) {
            this.rank = rank;
        }
        public long getReleaseTime() {
            return releaseTime;
        }
        public void setReleaseTime(long releaseTime) {
            this.releaseTime = releaseTime;
        }
        public String getReleaseTimeShow() {
            return releaseTimeShow;
        }
        public void setReleaseTimeShow(String releaseTimeShow) {
            this.releaseTimeShow = releaseTimeShow;
        }
        public String getSummary() {
            return summary;
        }
        public void setSummary(String summary) {
            this.summary = summary;
        }
    }
    @Override
    public String toString() {
        return "MovieBean{" +
                "message='" + message + '\'' +
                ", status='" + status + '\'' +
                ", result=" + result +
                '}';
    }
}

3 创建Api接口
public interface APi {
    //http://172.17.8.100/movieApi/movie/v1/findReleaseMovieList?page=1&count=20
    // @GET(?号前不固定的那部分网址,利用@Query传参)
    @GET("movieApi/movie/v1/findReleaseMovieList")
   Observable《MovieBean》 getMovieBean(@Query("page") int page, @Query("count") int count);
}

4    创建工具类
public class OkHttpUtils {
    public final APi api;
    //单例
    private static OkHttpUtils httpUtilsr=null;
    public static OkHttpUtils getInstance(){
        httpUtilsr = new OkHttpUtils();
        return httpUtilsr;
    }
    //私有化的构造方法
    private OkHttpUtils (){
//创建OkHttpClient对象
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .writeTimeout(5,TimeUnit.SECONDS)
                .readTimeout(5,TimeUnit.SECONDS)
                .addNetworkInterceptor(new LogginInterceptor())
                .build();
//创建retrofit对象
        Retrofit retrofit = new Retrofit
                .Builder()
//baseUrl(“就是写接口固定不变的前半部分”)
                .baseUrl("http://172.17.8.100/")
.addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(okHttpClient)
                .build();
//实例化接口
        api = retrofit.create(APi.class);
    }
    //拦截器
    private class LogginInterceptor implements Interceptor {
        @Override
        public okhttp3.Response intercept(Interceptor.Chain chain) throws IOException {
            Request request = chain.request();
            RequestBody body = request.body();
            Headers headers = request.headers();
            okhttp3.Response response = chain.proceed(request);
            Headers headers1 = response.headers();
            return response;
        }
    }
}

5   interface
public interface GetDate《T》 {
    void loadCurrentDate(T t);
    void refresh(T t);
    void loadMore(T t);
}

7   Presenter的base
public abstract class BasePresenter《V》 {
    V view;
    public V getView() { return view; }
    public void setView(V view) {    this.view = view;    }
    public  void jie(){ this.view = null; }
}


8   Presenter
public class Presenter extends BasePresenter {
    public void  loadCurrentDate(){
        OkHttpUtils okHttpUtils = OkHttpUtils.getInstance();
        Observable<MovieBean> movieBean = okHttpUtils.api.getMovieBean(1,10);
        movieBean.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<MovieBean>() {
            @Override
            public void onError(Throwable e) {
            }
            @Override
            public void onComplete() {
            }
            @Override
            public void onSubscribe(Disposable d) {
            }
            @Override
            public void onNext(MovieBean movieBean) {
                GetDate getDate = (GetDate) getView();
                getDate.loadCurrentDate(movieBean);
            }
        });
    }
    public void  refresh(){
        OkHttpUtils okHttpUtils = OkHttpUtils.getInstance();
        Observable<MovieBean> movieBean = okHttpUtils.api.getMovieBean(1,10);
        movieBean.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<MovieBean>() {
                    @Override
                    public void onError(Throwable e) {
                    }
                    @Override
                    public void onComplete() {
                    }
                    @Override
                    public void onSubscribe(Disposable d) {
                    }
                    @Override
                    public void onNext(MovieBean movieBean) {
                        GetDate getDate = (GetDate) getView();
                        getDate.refresh(movieBean);
                    }
                });
    }
    public void  loadMore(){
        OkHttpUtils okHttpUtils = OkHttpUtils.getInstance();
        Observable<MovieBean> movieBean = okHttpUtils.api.getMovieBean(1,20);
        movieBean.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<MovieBean>() {
                    @Override
                    public void onError(Throwable e) {
                    }
                    @Override
                    public void onComplete() {
                    }
                    @Override
                    public void onSubscribe(Disposable d) {
                    }
                    @Override
                    public void onNext(MovieBean movieBean) {
                        GetDate getDate = (GetDate) getView();
                        getDate.loadMore(movieBean);
                    }
                });
    }
}


9   Acivity的base
public abstract  class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getView());
        initView();
        initDate();
        showView();
    }
    public abstract  int  getView();
    public abstract void initDate();
    public abstract void initView();
    public abstract void showView();
}


10   activity.xml
<?xml version="1.0" encoding="utf-8"?>
《LinearLayout
    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=".MainActivity"》
    <!--注意高度不能设置为match_parent 要设置成wrap_content-->
    《com.jcodecraeer.xrecyclerview.XRecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/XRecyclerView"
        /》
《/LinearLayout》


11    MainActivity
public class MainActivity extends BaseActivity implements GetDate{
    private XRecyclerView xRecyclerView;
    private Presenter presenter;
    private Handler handler;
    private Madapter adapter;
    @Override
    public int getView() {
        return R.layout.activity_main;
    }
    @Override
    public void initView() {
        xRecyclerView = findViewById(R.id.XRecyclerView);
    }
    @Override
    public void initDate() {
        presenter = new Presenter();
        presenter.setView(this);
        presenter.loadCurrentDate();
    }
    @Override
    public void showView() {
        xRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
        adapter = new Madapter();
        xRecyclerView.setAdapter(adapter);
        handler = new Handler();
        xRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        presenter.refresh();
                        xRecyclerView.refreshComplete();
                    }},1000);
            }
            @Override
            public void onLoadMore() {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        presenter.loadMore();
                        xRecyclerView.loadMoreComplete();
                    }
                },1000);
            }
        });
    }
    @Override
    public void loadCurrentDate(Object o) {
        MovieBean bean= (MovieBean) o;
        List<MovieBean.ResultBean> result = bean.getResult();
        adapter.getDate(result,MainActivity.this,false);
    }
    @Override
    public void refresh(Object o) {
        MovieBean bean= (MovieBean) o;
        List<MovieBean.ResultBean> result = bean.getResult();
        adapter.getDate(result,MainActivity.this,false);
    }
    @Override
    public void loadMore(Object o) {
        MovieBean bean= (MovieBean) o;
        List<MovieBean.ResultBean> result = bean.getResult();
        adapter.getDate(result,MainActivity.this,true);
    }
    //防止内存泄漏
@Override
protected void onDestroy() {
    super.onDestroy();
    presenter.jie();
}
}



12   item.xml
<?xml version="1.0" encoding="utf-8"?>
《LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    》
<TextView
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:id="@+id/name"
    /》
</LinearLayout》


13  Adapter
public class Madapter extends XRecyclerView.Adapter {
    Context context;
    List<MovieBean.ResultBean> result=new ArrayList<>();
    private ViewHolder holder1;
    public void getDate(List<MovieBean.ResultBean> result, Context context,boolean b){
            this.context=context;
            if (b){
                this.result.addAll(result);
                notifyDataSetChanged();
            }else {
                this.result.clear();
                this.result.addAll(result);
                notifyDataSetChanged();
            }
    }
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item,null);
        holder1 = new ViewHolder(view);
        return holder1;
    }
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        holder1.name.setText(result.get(position).getName()+"");
    }
    @Override
    public int getItemCount() {
        return this.result.size();
    }
    class ViewHolder extends RecyclerView.ViewHolder{
        private final TextView name;
        public ViewHolder(View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.name);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值