SwipeRefreshLayout:下拉刷新 · AndroidX 源码指南
AAndroidX 源码指南
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),不需要此库。
  • 刷新过程中避免重复触发:在回调里用标志位或直接由数据层状态控制。

相关页面