HarmonyOS 鸿蒙Next下拉刷新与上滑加载案例

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next下拉刷新与上滑加载案例
<markdown _ngcontent-cdj-c237="" class="markdownPreContainer">

HarmonyOS Next应用开发案例(持续更新中……)

本案例完整代码,请访问:https://gitee.com/harmonyos-cases/cases/tree/master/CommonAppDevelopment/feature/pulltorefreshnews

介绍

本示例介绍使用第三方库的PullToRefresh组件实现列表的下拉刷新数据和上滑加载后续数据。

效果图预览

使用说明

  1. 进入页面,下拉列表触发刷新数据事件,等待数据刷新完成。
  2. 上滑列表到底部,触发加载更多数据事件,等待数据加载完成。

实现思路

  1. 使用第三方库pullToRefresh组件,将列表组件、绑定的数据对象和scroller对象包含进去,并添加上滑与下拉方法。源码参考PullToRefreshNews.ets
    PullToRefresh({
      // 必传项,列表组件所绑定的数据
      data: $newsData,
      // 必传项,需绑定传入主体布局内的列表或宫格组件
      scroller: this.scroller,
      // 必传项,自定义主体布局,内部有列表或宫格组件
      customList: () => {
        // 一个用@Builder修饰过的UI方法
        this.getListView();
      },
      // 下拉刷新回调
      onRefresh: () => {
        return new Promise<string>((resolve, reject) => {
          ...
        });
      },
      // 上滑加载回调
      onLoadMore: () => {
        return new Promise<string>((resolve, reject) => {
          ...
        });
      },
      customLoad: null,
      customRefresh: null,
    })
    <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
  2. 使用LazyForEach循环渲染列表。源码参考PullToRefreshNews.ets
    LazyForEach(this.newsData, (item: NewsData) => {
      ListItem() {
        ...
      }
    });
    <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

高性能知识点

不涉及

工程结构&模块类型

pulltorefreshnews                                  // har类型
|---pages
|---|---PullToRefreshNews.ets                      // 视图层-场景列表页面
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

模块依赖

[@ohos](/user/ohos)/PullToRefresh

参考资料

[@ohos](/user/ohos)/PullToRefresh
[@ohos](/user/ohos)/LazyForEach
PullToRefresh第三方库

</markdown>
10 回复
不执行onRefresh和onLoadMore,这是为什么。

我也遇到这个问题了

HarmonyOS的流畅动画和过渡效果让操作更加顺畅,体验极佳。

解决了,List组件需要设置edgeEffect属性为(EdgeEffect.None)

困扰我的问题解决了

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

请问如何通过接口返回状态来控制onRefresh和onLoadMore的刷新状态呀,每次1s,刷新完毕,不知道怎么办才好。

// 下拉刷新回调 onRefresh: () => { return new Promise<string>((resolve, reject) => { ... }); }, // 上滑加载回调 onLoadMore: () => { return new Promise<string>((resolve, reject) => { ... });

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

上拉加载数据之后,已经是最后一页了,没有更多数据了,这个怎么显示?

HarmonyOS 鸿蒙Next实现下拉刷新与上滑加载,通常可通过PullToRefresh组件完成。下拉列表触发刷新事件,上滑至底部触发加载更多数据。需将列表组件、数据对象及scroller对象集成至PullToRefresh中,并定义onRefresh和onLoadMore回调函数处理数据刷新和加载逻辑。确保列表组件能正确响应滚动事件,并适当管理状态以反馈用户操作。如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部