前言
隔初次使用SmartRefreshLayout已经很久了,之前也写过一篇关于SmartRefreshLayout使用介绍的文章
上拉加载下拉刷新---SmartRefreshLayout
今天review代码的时候,顺便看了下SmartRefreshLayout,版本迭代很快,功能已经加了不少,基于满足开发的基本需求,今天就简单整理下使用吧。
SmartRefreshLayout官网
今天涉及内容:
- SmartRefreshLayout依赖
- SmartRefreshLayout一些常用方法
- 在MainActivity中使用范例
- 效果图和项目结构图
- 更多使用
先来波效果图吧
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
网友评论