介绍
SwipeRefreshLayout 是 Android 官方 v4 支持包中的一个组件,该组件当中只接受 1 个子组件也就是需要刷新内容的组件,如果有多个子组件时将只展示第一个子组件中所更新的内容,后面的子组件将不予展示。这个子组件必须是允许滚动的,如 ListView、GridView 或者是 RecyclerView 等。该组件主要用于在屏幕中手指向下滑动时起到下拉刷新数据的作用。
相关方法
- setOnRefreshListener: 设置刷新监听器,需要重写 onRefresh() 方法,顶部下拉时会调用这个方法,在里面实现请求数据的逻辑,设置下拉进度条消失等等。
- setColorSchemeResources:设置下拉进度条的颜色主题,可变参数并且是颜色资源 id,可以设置多种不同的颜色,每转一圈就显示一种颜色。
- setProgressBackgroundColorSchemeResource:设置下拉进度条的背景颜色,默认为白色。
- setRefreshing: 设置刷新的状态,true 表示正在刷新,false 表示取消刷新。
- setDistanceToTriggerSync:设置手指向下滑动多少距离后触发刷新功能。
- isRefreshing:判断当前的状态是否正在刷新。
例子
下拉刷新后添加列表内容
编写布局文件
使用SwipeRefreshLayout组件前,需要添加如下依赖库
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
将默认添加的布局管理器修改为相对布局管理器并将 TextView 组件删除,然后添加 1个 SwipeRefreshLayout 组件并在该组件中添加 1 个 ListView 用于实现下拉刷新后添加列表内容。具体代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--下拉刷新组件-->
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/dropRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!--信息列表-->
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</RelativeLayout>
编写SwipeRefreshLayoutActivity
- 首先定义所需要的全局变量,然后分别定义 Handler与 Runnable 对象用于实现刷新后向列表中添加新数据,最后定义 1 个集合并在集合中设置默认显示列表中的数据。
- 在主活动的 onCreate() 方法中,首先获取用于显示列表的 ListView 组件,然后获取 SwipeRefreshLayout 组件并为其设置时间监听器,再设置刷新进度条的颜色,最后创建列表适配器并为ListView 列表组件设置该适配器。
public class SwipeRefreshLayoutActivity extends AppCompatActivity {
private SwipeRefreshLayout swipeRefreshLayout; //下拉刷新组件
private ListView listView; //列表组件
private ArrayAdapter<String> adapter; //适配器
//创建Handler与Runnable处理延迟后消息
private Handler handler = new Handler();
private Runnable refresh = new Runnable() {
@Override
public void run() {
//向列表中添加新书名称
data.addAll(Arrays.asList(
"巅峰计划", "龙哥哥今天又鸽了", "宅叔马克斯"));
adapter.notifyDataSetChanged(); //更改适配器中数据
swipeRefreshLayout.setRefreshing(false); //结束刷新
}
};
//列表中信息集合
private List<String> data = new ArrayList<String>(
Arrays.asList("魔法ZC目录", "好吃的橘子鸭", "小鬼卡比",
"杨颜同学", "柞木不朽"));
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swipe_refresh_layout);
listView = (ListView) findViewById(R.id.listView); //获取列表组件
//获取下拉刷新组件
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.dropRefresh);
//设置下拉刷新监听器
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
//延迟5秒显示刷新内容
handler.postDelayed(refresh, 5000);
}
});
//设置刷新进度条颜色
swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_red_light,
android.R.color.holo_blue_dark, android.R.color.holo_green_dark,
android.R.color.holo_purple);
//创建列表适配器
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
//设置适配器
listView.setAdapter(adapter);
}
}
效果