美文网首页高级UI布局view
分页加载SmartRefreshLayout再研究

分页加载SmartRefreshLayout再研究

作者: 奔跑的佩恩 | 来源:发表于2019-09-24 11:24 被阅读0次

    前言

    隔初次使用SmartRefreshLayout已经很久了,之前也写过一篇关于SmartRefreshLayout使用介绍的文章
    上拉加载下拉刷新---SmartRefreshLayout
    今天review代码的时候,顺便看了下SmartRefreshLayout,版本迭代很快,功能已经加了不少,基于满足开发的基本需求,今天就简单整理下使用吧。
    SmartRefreshLayout官网

    今天涉及内容:

    1. SmartRefreshLayout依赖
    2. SmartRefreshLayout一些常用方法
    3. 在MainActivity中使用范例
    4. 效果图和项目结构图
    5. 更多使用

    先来波效果图吧


    2.gif

    一. SmartRefreshLayout依赖

    在app_module对应的build.gradle中添加以下引用:

    implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'  //1.0.5及以前版本的老用户升级需谨慎,API改动过大
    implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0'  //没有使用特殊Header,可以不加这行
    

    若你使用的是经典款的Header和Footer则不需要要引入SmartRefreshHeader:1.1.0

    如果使用 AndroidX 在 gradle.properties 中添加

    android.useAndroidX=true
    android.enableJetifier=true
    

    在布局中引用控件<我添加了经典款Header和Footer>:

        <com.scwang.smartrefresh.layout.SmartRefreshLayout
            android:id="@+id/refreshLayout"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/btn1"
            app:srlEnableScrollContentWhenLoaded="true"
            app:srlEnableFooterFollowWhenLoadFinished="true">
    
            <com.scwang.smartrefresh.layout.header.ClassicsHeader
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:srlClassicsSpinnerStyle="Translate"/>
    
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/rv"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
            <com.scwang.smartrefresh.layout.footer.ClassicsFooter
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:srlClassicsSpinnerStyle="Translate"/>
        </com.scwang.smartrefresh.layout.SmartRefreshLayout>
    

    二.SmartRefreshLayout一些常用方法

    2.1 声明和初始化
    //声明
    private SmartRefreshLayout mRefreshLayout;
    
    //初始化
    mRefreshLayout = findViewById(R.id.refreshLayout);
    
    2.2 是否启用刷新加载功能
            mRefreshLayout.setEnableRefresh(true);//是否启用下拉刷新功能
            mRefreshLayout.setEnableLoadMore(true);//是否启用上拉加载功能
    
    2.3 监听刷新/加载
            //下拉刷新
            mRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
                @Override
                public void onRefresh(@NonNull RefreshLayout refreshLayout) {
                    ToastUtil.shortShow("下拉刷新");
                    //发起网络请求
                    //......
                }
            });
    
            //上拉加载
            mRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
                @Override
                public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
                   ToastUtil.shortShow("上拉加载");
                    //发起网络请求
                    //......
                }
            });
    
    2.4 结束下拉刷新成功/失败
    refreshLayout.finishRefresh();//刷新成功
    refreshLayout.finishRefresh(false);//刷新失败
    
    2.5 结束上拉加载成功/失败
    refreshLayout.finishLoadMore();//加载完成<还有数据>
    refreshLayout.finishLoadMore();//加载失败<还有数据>
    
    refreshLayout.finishLoadMoreWithNoMoreData(); //全部加载完成<已经没有数据>
    
    2.6 自动刷新/加载
    mRefreshLayout.autoRefresh();//自动刷新
    mRefreshLayout.autoLoadMore();//自动加载
    

    三.在MainActivity中使用范例

    下面贴出MainActivity中使用示例代码:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private Button mBtn1;
        private SmartRefreshLayout mRefreshLayout;
        private RecyclerView mRecyclerView;
    
        private List<String>mNames;
        private DefaultAdapter<String> mDefaultAdapter;
        private int mCount=0;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            initData();
            setListener();
        }
    
        private void initData() {
            mRefreshLayout = findViewById(R.id.refreshLayout);
            mRecyclerView = findViewById(R.id.rv);
            mBtn1 = findViewById(R.id.btn1);
    
            mRefreshLayout.setEnableRefresh(true);//是否启用下拉刷新功能
            mRefreshLayout.setEnableLoadMore(true);//是否启用上拉加载功能
    
            mBtn1.setText("通用线性");
    
            //通用布局
            mNames = new ArrayList<>();
            mDefaultAdapter=new DefaultAdapter<>(MainActivity.this,mNames);
    
            LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);
            layoutManager.setSmoothScrollbarEnabled(true);
            mRecyclerView.setNestedScrollingEnabled(false);
            mRecyclerView.setHasFixedSize(true);
            mRecyclerView.setLayoutManager(layoutManager);
            mRecyclerView.setAdapter(mDefaultAdapter);
        }
    
        private void setListener() {
            mBtn1.setOnClickListener(this);
            //下拉刷新
            mRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
                @Override
                public void onRefresh(@NonNull RefreshLayout refreshLayout) {
                    refreshLayout.finishRefresh();//刷新成功
    //                refreshLayout.finishRefresh(false);//刷新失败
                    mCount=0;
    
                    mNames.clear();
                    mDefaultAdapter.notifyDataSetChanged();
                    ToastUtil.shortShow("下拉刷新");
                }
            });
            //上拉加载
            mRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
                @Override
                public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
                    mCount++;
                    if(mCount==3){
                        refreshLayout.finishLoadMoreWithNoMoreData(); //全部加载完成<已经没有数据>
                    }else{
                        refreshLayout.finishLoadMore();//加载完成<还有数据>
    //                    refreshLayout.finishLoadMore();//加载失败<还有数据>
                    }
                    ToastUtil.shortShow("上拉加载");
                    for (int i = 0; i < 10; i++){
                        mNames.add("小黄" + mCount+i);
                    }
                    mDefaultAdapter.notifyDataSetChanged();
                }
            });
    
            //点击事件
            mDefaultAdapter.setOnItemClickListener(new DefaultAdapter.OnItemClickListener() {
                @Override
                public void onClick(View v,String name) {
                    switch (v.getId()) {
                        case R.id.container:
                            ToastUtil.shortShow("====name="+name);
                            break;
                        default:
                            break;
                    }
                }
            });
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn1://通用布局线性测试
    //                mRefreshLayout.autoRefresh();//自动刷新
    //                mRefreshLayout.autoLoadMore();//自动加载
                    break;
                default:
                    break;
            }
        }
    
    }
    

    四.效果图和项目结构图

    效果图


    2.gif

    项目结构图


    image.png

    五.更多使用

    更多使用请参考
    上拉加载下拉刷新---SmartRefreshLayout
    SmartRefreshLayout官网

    相关文章

      网友评论

        本文标题:分页加载SmartRefreshLayout再研究

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