首页 > 其他分享 ># 安卓中实现分页加载方案总结(一)——基于SmartRefreshLayout

# 安卓中实现分页加载方案总结(一)——基于SmartRefreshLayout

时间:2022-09-29 15:36:11浏览次数:57  
标签:... refreshLayout void SmartRefreshLayout 安卓中 Override page 加载

安卓中实现分页加载方案总结(一)——基于SmartRefreshLayout

背景

项目中多场景使用到了列表分页加载的操作,比如消息列表,先总结一下基于SmartRefreshLayout的分页加载方案。

实现方案

一、导入SmartRefreshLayout相关jar包

    // 下拉刷新
    implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0'
    implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'

二、xml布局文件引入SmartRefreshLayout

     <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ...>
        <com.scwang.smartrefresh.layout.SmartRefreshLayout
                android:id="@+id/refreshLayout"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <com.scwang.smartrefresh.layout.header.ClassicsHeader
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />


                <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/rv_list"    
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/transparent"
                    android:overScrollMode="never"
                    tools:listitem="@layout/list_message_item" />

                <com.scwang.smartrefresh.layout.footer.ClassicsFooter
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />

            </com.scwang.smartrefresh.layout.SmartRefreshLayout>
         ...
    </LinearLayout>

三、activity(fragment)中进行相应调用

public class MyActivity extends PermissionActivity implements View.OnClickListener{
    ...
    ...
    // 1、page变量,标记每次请求的页面number
    private int page = 1;
    private SmartRefreshLayout refreshLayout;

    @Override
    protected int getContentLayoutId() {
        return R.layout.activity_my_carrier;
    }

    @Override
    protected void initWidget() {
        ...
        ...
        refreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshLayout) {
                prePage = page;
                // 刷新的时候也是加载第一页的数据,和第一次进入一致
                page = 1;
                refreshLayout.setEnableLoadMore(true);
                requestWeb();
            }
        });
        // 2、加载更多监听,通过page获取新增page的页面数据
        refreshLayout.setOnLoadMoreListener(new onl oadMoreListener() {
            @Override
            public void onl oadMore(RefreshLayout refreshLayout) {
                page++;
                requestWeb();
            }
        });
    }

    @Override
    protected void intiData() {
        refreshLayout.autoRefresh();
    }

    // 请求网络数据
    private void requestWeb(){
            // 通过传入page和pageSize参数从后台获取该页的数据。
            RetrofitHelper.getInstance().getInformation(page, 10)
                .subscribe(new BaseObserver<PageInfo<Information>>() {
                    @Override
                    public void onNext(@NonNull PageInfo<Information> rsp) {
                        loading.setValue(false);
                        if (null != rsp.getList()) {
                            // 3、获取查询到的数据,增加到我们的data数组中。
                            infoMutableLiveData.setValue(rsp);
                        }
                    }

                    @Override
                    public void one rror(Throwable e) {
                        super.onError(e);
                        loading.setValue(false);
                    }
                });
    }
    ...
    ...
}

总结

本文简单总结了下,基于SmartRefreshLayout实现分页加载和刷新的思路,可供参考,持续优化。

标签:...,refreshLayout,void,SmartRefreshLayout,安卓中,Override,page,加载
From: https://blog.51cto.com/baorant24/5723001

相关文章

  • 找不到或无法加载主类
       我从来不相信什么懒洋洋的自由。我向往的自由是通过勤奋和努力实现的更广阔的人生。我要做一个自由又自律的人,靠势必实现的决心认真地活着。......
  • mapboxgl加载tiff
    缘起近期在项目中遇到这么一个需求,需要在地图上展示一组格网数据,格网大小为2m*2m,地图api用的mapboxgl。起初拿到这个需要感觉很easy,在地图上添加一个fill图层就好啦。把格......
  • mybatis在spring mvc中的加载过程
    本地搭建了一套工程,把spring-5.2.x源码与mybatis-3.5.11源码做了整合,debug了一下mybatis-spring在springmvc中的加载过程。画了下面的图,删减了一些说明,图比较简练。后续......
  • vue组件中如何首次加载就触发watch
    watch:{"val":{immediate:true,//首次加载的时候执行函数deep:true,//深入观察数组值的变化,inputVal:function(){}}} ......
  • SpringBoot系列——加载自定义配置文件
    Java开发过程中,一些配置信息不想写到application.properties里面去,想自己弄一个配置文件,然后加载。例子如下:Employee.java类核心代码:@Configuration//用来标注一个自定......
  • maven 加载依赖sqljdbc4报错
    错误现象:MavenFailuretofindcom.microsoft.sqlserver:sqljdbc4:jar:4.0解决方法:1.下载对应的sqljdbc4.jar包2.shell窗口执行命令mvninstall:install-file-D......
  • 数据量太大,DOM节点加载过多,怎么保证前端在渲染的时候页面不会卡(性能优化)
    一、定时器分批渲染既然一次渲染10万条数据会造成页面加载速度缓慢,那么我们可以不要一次性渲染这么多数据,而是分批次渲染,比如一次10000条,分10次来完成,这样或许会对页面......
  • JavaScript异步加载的三种方式——async、defer、动态创建
    async和deferhtml4.0中定义了defer;html5.0中定义了async。如果没有defer和async,浏览器会立即加载并执行指定的JS脚本,并不会等待后续载入的文档元素。如果有async,加载后......
  • 反射(类加载内存分析)
    java内存图:  类的加载过程: 加载:  将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象链......
  • java类加载器?
    Java类加载器ClassLoader总结JAVA类装载方式,有两种:1.隐式装载,程序在运行过程中当碰到通过new等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。2.显式装载,通过cla......