HarmonyOS 鸿蒙Next 实现下拉刷新+上拉加载的封装

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

下拉刷新

image.png

Refresh组件支持下拉刷新,包裹list组件,下拉事件中更新列表

@Entry
@Component
struct RefreshCase {
  @State
  refreshing: boolean = false
  @Builder
  refreshContent() {
    Text('正在加载中...')
      .width('100%')
      .textAlign(TextAlign.Center)
      .backgroundColor(Color.Pink)
  }
  @State
  list: number[] = Array(20).fill(Date.now())


  build() {
    RelativeContainer() {
      Refresh({ refreshing: $$this.refreshing, builder: this.refreshContent }) {
        List() {
          ForEach(this.list, (item: number) => {
            ListItem() {
              Row() {
                Text(item.toString())
              }.width('100%').padding(20).border({
                width: {
                  bottom: 1
                },
                color: Color.Gray,

              })
            }
          })
        }

      }.onRefreshing(() => {
        setTimeout(() => {
          this.list = Array(20).fill(Date.now())
          this.refreshing = false
        }, 1000)
      })
    }
    .height('100%')
    .width('100%')
  }
}

上拉加载

image.pngimage.png

注册三个事件,开始滚动,滚动结束,滚动至列表尾部(触发两次,滚动至+回弹)

设置变量是否滚动底部,开始滚动false,滚动至列表尾部true,滚动结束判断变量进行数据追加

@Entry
@Component
struct RefreshCase {
  @State
  refreshing: boolean = false

  @Builder
  refreshContent() {
    Text('正在加载中...')
      .width('100%')
      .textAlign(TextAlign.Center)
      .backgroundColor(Color.Pink)
  }
  scroller:Scroller = new Scroller()
  @State
  list: number[] = Array(20).fill(Date.now())
  @State
  isEnd: boolean = false

  build() {
    RelativeContainer() {
      Refresh({ refreshing: $$this.refreshing, builder: this.refreshContent }) {
        List({scroller:this.scroller}) {
          ForEach(this.list, (item: number) => {
            ListItem() {
              Row() {
                Text(item.toString())
              }.width('100%').padding(20).border({
                width: {
                  bottom: 1
                },
                color: Color.Gray,

              })
            }
          })
        }

        .onScrollStart(() => {
          this.isEnd = false
        })
        .onScrollStop(() => {
          if(this.isEnd){
            setTimeout(()=>{
              this.list.push(...Array(10).fill(Date.now()))
               promptAction.showToast({
                message: '已添加10条数据'
              })
              this.scroller.scrollEdge(Edge.Bottom)
            },1000)
          }
        })
        .onReachEnd(() => {
          this.isEnd = true
        })
      }.onRefreshing(() => {
        setTimeout(() => {
          this.list = Array(20).fill(Date.now())
          this.refreshing = false
        }, 1000)
      })
    }
    .height('100%')
    .width('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next 实现下拉刷新+上拉加载的封装的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next 实现下拉刷新+上拉加载的封装的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,实现下拉刷新与上拉加载的封装,可以基于组件化思想,通过自定义组件来实现。以下是实现思路及简要代码示例:

实现思路

  1. 创建自定义组件:定义一个包含列表显示区域及刷新和加载提示的自定义组件。
  2. 监听滚动事件:通过监听列表的滚动事件,判断用户是否进行了下拉或上拉操作。
  3. 处理下拉刷新:当用户下拉到顶部时,触发刷新逻辑。
  4. 处理上拉加载:当用户滚动到底部时,触发加载更多数据的逻辑。

简要代码示例

<!-- 自定义组件的XML布局 -->
<DirectionalLayout>
    <RefreshComponent id="refresh" />
    <ListContainer id="list" />
    <LoadingPrompt id="loading" />
</DirectionalLayout>
// 自定义组件的JavaScript逻辑
export default {
    onInit() {
        this.$refs.refresh.onRefresh(() => {
            // 刷新逻辑
        });
        this.$refs.list.onScrollBottom(() => {
            // 加载更多数据逻辑
        });
    }
}

注意事项

  • 确保RefreshComponentListContainer等组件已正确实现。
  • 滚动事件监听及数据处理逻辑需根据具体需求调整。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部