高级UI布局view

分页加载SmartRefreshLayout再研究

2019-09-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官网

上一篇下一篇

猜你喜欢

热点阅读