HarmonyOS 5.0.0 或以上:实现列表下拉刷新与空数据占位实战


一、功能简介

本篇将讲解如何在 ArkTS 中实现列表的下拉刷新操作,并结合空数据状态的占位图文提示,适用于新闻类、社区类 App 的动态内容加载场景。


二、页面结构

entry/src/main/ets/pages/RefreshDemo.ets

三、代码演示

@Entry
@Component
struct RefreshDemo {
  @State list: Array<string> = []
  @State refreshing: boolean = false

  aboutToAppear() {
    this.loadData()
  }

  loadData() {
    // 模拟异步加载数据
    setTimeout(() => {
      this.list = ['苹果', '香蕉', '橘子']
      this.refreshing = false
    }, 1000)
  }

  onRefresh() {
    this.refreshing = true
    this.list = []  // 清空再加载
    this.loadData()
  }

  build() {
    Column() {
      Text('水果列表')
        .fontSize(20)
        .margin({ bottom: 12 })

      // 下拉刷新容器
      List({ space: 12 }) {
        // 如果为空,展示占位
        If(this.list.length === 0 && !this.refreshing, () => {
          ListItem() {
            Column() {
              Image($r('app.media.empty'))  // 占位图资源
                .width(100)
                .height(100)
                .margin({ bottom: 12 })
              Text('暂无数据')
                .fontSize(18)
                .fontColor(Color.Gray)
            }
            .width('100%')
            .padding(40)
            .align(Alignment.Center)
          }
        })

        // 展示真实数据
        ForEach(this.list, (item, index) => {
          ListItem() {
            Text('🍎 ' + item)
              .fontSize(18)
              .padding(12)
              .backgroundColor('#f6f6f6')
              .borderRadius(8)
          }
        }, item => item)
      }
      .divider(false)
      .edgeEffect(EdgeEffect.Spring)
      .onScrollEdge({ edge: Edge.Top, callback: () => this.onRefresh() })
    }
    .width('100%')
    .padding(20)
  }
}

四、运行效果

  1. 页面加载后展示:

    水果列表  
    🍎 苹果  
    🍌 香蕉  
    🍊 橘子  
    
  2. 下拉页面顶部时触发刷新 → 清空 → 加载数据 → 更新列表。

  3. 若加载中或数据为空时:

    [占位图]
    暂无数据
    

五、常见易错点与解决方法

易错点表现原因解决方案
刷新无反应拖动无效没有设置 .onScrollEdge设置 edge: Edge.Top 并绑定回调函数
占位图不显示空白区域图片路径错误或资源未添加添加图片至 resources/base/media/empty.png 并引用 $r('app.media.empty')
列表闪烁页面重复刷新刷新逻辑未正确管理 refreshing 状态设置状态变量避免过度渲染
加载无动画用户体验差未添加加载指示器可搭配 Loading 组件或后续章节补充动画效果

六、进阶建议

  • 可结合网络请求,实现真实数据刷新;

  • 支持下拉加载更多(边缘 Edge.Bottom);

  • 占位内容可以改为按钮,引导用户手动刷新。


下一篇将进入第14篇内容:

《HarmonyOS 5.0.0 或以上:实现动态表单生成与表单校验》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值