View 体系
View 体系 · androidx.core
SwipeRefreshLayout:下拉刷新Core 1.20.0-alpha01
包裹可滚动内容、触发刷新回调、控制刷新状态与配色。
最后更新 2026-08-01
复制即用
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>代码控制:
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
SwipeRefreshLayout refresh = findViewById(R.id.swipe_refresh);
refresh.setColorSchemeResources(R.color.primary);
// 设置刷新回调
refresh.setOnRefreshListener(() -> {
loadData(() -> {
refresh.setRefreshing(false); // 数据加载完成后复位
});
});
// 编程触发/停止
refresh.setRefreshing(true);常见陷阱
- 子 View 不可滚动:必须包裹一个可滚动子 View(RecyclerView/ScrollView),否则无法下拉。
- 忘 setRefreshing(false):数据加载完成不复位,转圈不停。
- 刷新中重复触发:回调里用标志位或数据层状态控制。
- 与嵌套滚动冲突:内部滚动与下拉刷新手势冲突时调整
setDistanceToTriggerSync或距离参数。
要点
- 必须包裹一个可滚动的子 View(ListView、RecyclerView、ScrollView 等),否则无法下拉。
setOnRefreshListener注册回调;数据加载完成后必须调用setRefreshing(false),否则转圈不停。setColorSchemeResources自定义指示器颜色。- Compose 中优先使用
PullToRefreshBox(Material3),不需要此库。 - 刷新过程中避免重复触发:在回调里用标志位或直接由数据层状态控制。