前言
在Android
开发过程中,我们能有时会用到下拉刷新的功能。官方提供了一个下拉控件——SwipeRefreshLayout
,为了方便使用,我封装了一个帮助类SwipeRefreshHelper
,以便在使用SwipeRefreshLayout
时更加快捷简便。下面就来了解下SwipeRefreshHelper
的使用吧。
今天涉及内容:
- SwipeRefreshLayout下拉刷新库依赖
- SwipeRefreshLayout控件在布局中引用
- SwipeRefreshHelper 在 Activity 中使用
- 效果图和项目结构图
- SwipeRefreshHelper 源码
先来波效果图
1.gif
一. SwipeRefreshLayout下拉刷新库依赖
在你项目的app_module
对应的build.gradle
中添加如下依赖:
dependencies {
//swiperefreshlayout
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
}
二.SwipeRefreshLayout控件在布局中引用
在你的Activity
对应的布局中引入SwipeRefreshLayout
控件,类似如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:pain="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/mSwipeRefreshLayout"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/mContentLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
//ConstraintLayout布局也可以替换成其他布局,其他代码省略
//......
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
三.SwipeRefreshHelper 在 Activity 中使用
我将SwipeRefreshLayout
的下拉刷新封装到了一个帮助类SwipeRefreshHelper
中,下面给出SwipeRefreshHelper
在TempActivity
中使用的代码:
public class TempActivity extends AppCompatActivity{
private TextView mTvTest;
private Button mBtnTest;
private SwipeRefreshLayout mSwipeRefreshLayout;
private SwipeRefreshHelper mSwipeRefreshHelper;
private Timer mTimer;
private int count;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp);
//初始化控件
initView();
//初始化数据
initData();
//控件监听
setListener();
}
/**初始化控件**/
private void initView(){
mTvTest=findViewById(R.id.mTvTest);
mBtnTest=findViewById(R.id.mBtnTest);
mSwipeRefreshLayout=findViewById(R.id.mSwipeRefreshLayout);
}
private void initData(){
mSwipeRefreshHelper=new SwipeRefreshHelper(mSwipeRefreshLayout);
//设置下拉主题颜色(最多设置四种颜色,最少设置一种颜色)
mSwipeRefreshHelper.setColorSchemeResources(R.color.green,R.color.red,R.color.black,R.color.blue);
// //设置背景色(不设置时默认为白色背景)
// mSwipeRefreshHelper.setProgressBackgroundColorSchemeResource(R.color.green);
//初始化下拉刷新
mSwipeRefreshHelper.initRefresh(new SwipeRefreshHelper.OnRefreshListener() {
@Override
public void refresh() {
//下拉刷新的处理
//......
//模拟通讯流程
startTimer();
}
});
//需要一进入activity界面时进行自动刷新时调用
// //自动刷新(需要在initRefresh方法之后调用)
// mSwipeRefreshHelper.autoRefresh();
}
/**控件监听**/
private void setListener() {
mBtnTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mSwipeRefreshHelper.isRefreshing()){
ToastUtil.shortShow("正在刷新");
}else{
ToastUtil.shortShow("刷新完毕");
}
}
});
}
private void startTimer(){
mTimer=new Timer();
mTimer.schedule(new TimerTask() {
@Override
public void run() {
count++;
if(count==8){
receiveHttp();
count=0;
mTimer.cancel();
mTimer=null;
}else{
runOnUiThread(new Runnable() {
@Override
public void run() {
ToastUtil.shortShow("count="+count);
}
});
}
}
},0,1000);
}
private void receiveHttp(){
//结束刷新
mSwipeRefreshHelper.stopRefresh();
}
@Override
protected void onDestroy() {
if(mTimer!=null){
mTimer.cancel();
mTimer=null;
}
super.onDestroy();
}
}
四.效果图和项目结构图
效果图.gif 项目结构图.png五.SwipeRefreshHelper 源码
下面给出 SwipeRefreshHelper
源码:
网友评论