美文网首页Android开发Android 进阶之路
【 Android 】网络数据分页加载显示

【 Android 】网络数据分页加载显示

作者: Tyhoo_Wu | 来源:发表于2019-06-30 09:47 被阅读13次

前言:一种非常规做法的下拉刷新上拉加载实现方式。

示例图:


示例图.gif

API使用豆瓣电影 Top 250,RxJava + Retrofit 进行网络请求,Glide 加载图片。

导入必要的库:

// MD库(里面包含原生RecyclerView控件)
implementation 'com.google.android.material:material:1.0.0'

// RxAndroid
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.10'

// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.0'

// Glide
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'

思路:
通过监听 RecyclerView 的addOnScrollListener来获取onScrollStateChanged的改变,重写onScrollStateChanged,判断是否滑动到最后一个可见位置来进行新数据的加载。通过 List 的addAll将新数据和旧数据都加载到 List 里来实现加载更多。

核心代码:
1.判断是否是最后一个可见位置

private boolean isVisibleBottom(RecyclerView recyclerView) {
    LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
    int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();
    int visibleItemCount = layoutManager.getChildCount();
    int totalItemCount = layoutManager.getItemCount();
    int state = recyclerView.getScrollState();
    return (visibleItemCount > 0
            && lastVisibleItemPosition == totalItemCount - 1
            && state == RecyclerView.SCROLL_STATE_IDLE);
}

2.RecyclerView滑动监听

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
        if (RecyclerView.SCROLL_STATE_IDLE == newState
                && isVisibleBottom(recyclerView)) {
            // 加载数据
            getDoubanTop250Data()
        }
    }
});

3.网络请求,往List里添加数据

private List<DoubanBean.SubjectsBean> mList = new ArrayList<>();

// start 是从第几个开始
// count 是加载多少条数据
private void getDoubanTop250Data() {
    // 网络请求
    Observable<DoubanBean> observable = mDoubanAPI.getDoubanTop250(
            "0b2bdeda43b5688921839c8ecb20399b", start, count);
    observable.subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<DoubanBean>() {
                @Override
                public void onSubscribe(Disposable d) {
                    Log.d(TAG, "onSubscribe: ");
                }

                @Override
                public void onNext(DoubanBean doubanBean) {
                    Log.d(TAG, "onNext: ");

                    // 新数据添加到List里
                    List<DoubanBean.SubjectsBean> list = doubanBean.getSubjects();
                    if (list != null) {
                        mList.addAll(list);
                        start = start + count;
                    }
                }

                @Override
                public void onError(Throwable e) {
                    Log.d(TAG, "onError: ");
                }

                @Override
                public void onComplete() {
                    Log.d(TAG, "onComplete: ");
                }
            });
}

示例代码已上传至 Github,如果本文对你有帮助请点喜欢♥。
https://github.com/cnwutianhao/LoadMore

相关文章:
【 Android 】RecyclerView 使用方法总结
https://www.jianshu.com/p/c4cfe38a91ed
https://github.com/cnwutianhao/RecyclerView
【 Android 】豆瓣电影 API 指南
https://www.jianshu.com/p/a7e51129b042
https://github.com/cnwutianhao/DoubanMovie

相关文章

  • [38→100]一个常规的Android页面模型:NetFrag

    问题场景 Android开发中大部分页面都包含如下逻辑: 进入页面,加载网络数据,显示加载页面 加载完成后,有以下...

  • 【 Android 】网络数据分页加载显示

    前言:一种非常规做法的下拉刷新上拉加载实现方式。 示例图: API使用豆瓣电影 Top 250,RxJava + ...

  • 自定义ProgressStateLayout实现网络请求状态间的

    前言 在Android开发中我们经常遇到这样的场景:去加载网络数据时需要显示进度条,提示用户正在加载,加载失败需要...

  • app测试神坑

    1. 点击加载更多,的分页处理技术,是否有重复数据,数据显示是否完整,加载过程中是否页面跳动,是否有卡在加载中的状...

  • Jetpack学习-7-Paging

    Paging是什么 分页库可一次加载和显示一块数据,按需载入部分数据减少网络带宽和系统资源的使用量。 简单使用 引...

  • SwipeRefreshLayout内Recyclerview刷

    功能要求:分页加载网络数据,实现上拉下拉功能错误日志:java.lang.IndexOutOfBoundsExce...

  • mysql——分页技术实现(基于layui框架)

    一.分页技术概述 分页技术: JSP页面,用来显示数据! 如果数据有多条,分页显示,每页显示10条,多页; 好...

  • Paging Library

    概述 类 数据库示例 加载数据网络或数据库网络和数据库 分页库使您的应用程序更容易从数据源逐步加载所需的信息,而不...

  • android list列表上拉加载和下拉刷新

    在我们的开发中对于大量的列表数据进行展示,后端开发肯定会进行分页处理,而在android前端我们也需要进行分页加载...

  • ListView分页加载数据小结

    ListView分页加载数据小结 效果描述 分页:当用户在ListView界面上的时候不会加载全部的数据,而是从服...

网友评论

    本文标题:【 Android 】网络数据分页加载显示

    本文链接:https://www.haomeiwen.com/subject/wjyvcctx.html