ArkUI中的Refresh组件

前言

好久没更了,在跟着视频写项目,这次认识了一个新的组件Refresh
感觉比较重要的几个属性,例如isRefreshing,这个是要用引用传递的,平时传递都是值传递,这里要用引用传递
然后是RefreshStatus,后面的组件是否出现是需要这个判断的,剩下的解释就放在代码中了
在这里插入图片描述

效果

在这里插入图片描述

代码

@Entry
@Component
struct DemoPage {
//描述是否为刷新状态
  @State isRefreshing:boolean = false
  //记录刷新状态,初始化为未拉伸
  @State refreshState: RefreshStatus = RefreshStatus.Inactive;
  //记录拉取的偏移量
  @State refreshOffset: number = 0;
  //记录是否正在加载更多
  @State isLoading: boolean = false;
  //创建拉取后的显示组件
  @Builder RefreshBuilder() {
    Stack({alignContent:Alignment.Bottom}){
      // 当刷新状态处于下拉中或刷新中状态时Progress组件才存在
      if (this.refreshState != RefreshStatus.Inactive && this.refreshState != RefreshStatus.Done){
        Progress({ value: this.refreshOffset, total: 64, type: ProgressType.Ring })
          .width(32).height(32)
          .style({ status: this.isRefreshing ? ProgressStatus.LOADING : ProgressStatus.PROGRESSING })
          .margin(10)
      }
    }
    .clip(true)
    .height("100%")
    .width("100%")
  }

  build() {
    Column(){
      Refresh({refreshing:$$this.isRefreshing,builder: this.RefreshBuilder()}){
        List({space:6}){
          ForEach(Array.from({length:100}),(index:number)=>{
            ListItem(){
              Text('123').width('100%').height(50).backgroundColor(Color.Pink)
            }

          })
        }
        //这个是在向上拉取的时候触发的
        .onScrollFrameBegin((offset:number,state:ScrollState)=>{
          console.log('offset:' + offset + ' state:' + state)
          return { offsetRemain: offset }
        })
        .scrollBar(BarState.Off)
        // 开启边缘滑动效果
        .edgeEffect(EdgeEffect.Spring, { alwaysEnabled: true })
      }
      //这个是refresh组件的方法,可以将刷新状态和偏移量传给外部
      .onOffsetChange((offset: number) => {
        this.refreshOffset = offset;
      })
      .onStateChange((state: RefreshStatus) => {
        this.refreshState = state;
      })
      // 刷新回调
      .onRefreshing(()=>{
        setTimeout(()=>{
          this.isRefreshing = false
        },2000)
      })
    }
    .width('100%')

  }
}
在软件开发中,您提到的“上滑列表盖住上面固定部分并展开隐藏部分”的功能通常是指"Pull-to-Refresh"或"上拉刷新"的设计模式。这个功能常见于滚动列表(如瀑布流布局、分页列表等),当用户向上滑动屏幕时,可以触发加载更多数据的行为,并且上方固定的元素(比如头部导航栏)可能会被短暂地遮挡或动态调整位置以便显示加载状态。 在华为鸿蒙系统的ArkUI框架中,使用HarmonyOS组件库以及arkts(一种基于XML的界面描述语言)来实现这样的功能,一般步骤如下: 1. **创建XML布局**:在arkts文件中,设置包含滚动视图(例如`com.huawei.hms.ui.widget_pullrefresh.PullToRefreshLayout`)和其他静态元素的布局结构。 ```xml <com.huawei.hms.ui.widget_pullrefresh.PullToRefreshLayout> <com.example.YourScrollableListView/> <!-- 上方固定部分 --> <View layout="@layout/your_fixed_header"/> </com.huawei.hms.ui.widget_pullrefresh.PullToRefreshLayout> ``` 2. **添加事件监听**:在arkts代码中,给滚动视图添加`onRefreshListener`,监听上滑动作。 ```arkts val pullRefreshLayout = findViewById<com.huawei.hms.ui.widget_pullrefresh.PullToRefreshLayout>() pullRefreshLayout.setOnRefreshListener { /* 发起网络请求加载新数据 */ } ``` 3. **处理动画**:当开始加载时,可以使用系统提供的动画效果改变顶部固定元素的位置,完成加载后再将其恢复原位。 4. **更新内容**:在上拉刷新操作完成后,从服务器获取的数据填充到滚动视图中,同时取消刷新状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值