HarmonyOS 鸿蒙Next 当刷新组件和嵌套列表一起使用时,刷新交互有问题

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

HarmonyOS 鸿蒙Next 当刷新组件和嵌套列表一起使用时,刷新交互有问题 场景:Refresh配合List组件使用,其中List组件内部嵌套WaterFlow组件,当快速滑动WaterFlow列表,WaterFlow滑动到顶端就会触发Refresh刷新,期待当父列表List滑动到顶端时才触发Refresh刷新。

2 回复

list组件在小于一屏的时候是会让手势失效,

可给WaterFlow组件添加属性 .edgeEffect(EdgeEffect.None)

@Entry
@Component
struct Index {

  @State private refreshing: boolean = false

  private scroller: Scroller = new Scroller()

  private headerList: number[] = [0, 1, 2, 3, 4, 5]

  private waterFlowList: number[] = [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,0, 1, 2, 3, 4, 5]

  build() {
    Column() {

      Refresh({ refreshing: $$this.refreshing, builder: this.renderRefresh() }) {

        this.customList()

      }
      .onStateChange(state => {
        if (state !== RefreshStatus.Refresh) {
          return
        }
        setTimeout(() => {
          this.refreshing = false
        }, 3000)
      }
    }
    .height('100%')
    .width('100%')
  }

  /**
   * 自定义下拉刷新样式
   */
  @Builder
  renderRefresh() {
    Image($r('app.media.ic_refresh_loading'))
      .width(64)
      .height(64)
  }

  @Builder
  private customList() {
    List() {
      ListItemGroup({ header: this.salesHomeTitle() }) {
        ForEach(this.headerList, (item: number) => {
          ListItem() {
            Row() {
              Text(`第${item}行数据`)
                .fontSize(30)
                .fontWeight(60)
            }
            .width('100%')
            .height(100)
          }
        })
        ListItem() {
          this.getWaterFlow()
        }
      }
    }
    .edgeEffect(EdgeEffect.Spring)
    .sticky(StickyStyle.Header)
    .scrollBar(BarState.Off)
    .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])
  }

  @Builder
  salesHomeTitle() {
    Row({ space: 10 }) {
      Text('标题区域')
    }
    .width('100%')
    .justifyContent(FlexAlign.Center)
    .alignItems(VerticalAlign.Center)
    .backgroundColor(Color.White)
    .height(100)
  }

  @Builder getWaterFlow() {
    WaterFlow() {
      ForEach(this.waterFlowList, (item: number, index: number) => {
        FlowItem() {
          Row() {
            Text(`WaterFlow第${item}个数据`)
          }
          .height(index % 2 == 0 ? 100 : 80)
        }
      }
    }
    .layoutWeight(1)
    .edgeEffect(EdgeEffect.None)
    .padding({ left: 10, right: 10 })
    .columnsTemplate('1fr 1fr')
    .width('100%')
    .height('100%')
    .nestedScroll({ scrollForward: NestedScrollMode.PARENT_FIRST, scrollBackward: NestedScrollMode.SELF_FIRST })
  }
}

更多关于HarmonyOS 鸿蒙Next 当刷新组件和嵌套列表一起使用时,刷新交互有问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,当刷新组件和嵌套列表一起使用时,如果遇到刷新交互问题,可能的原因及处理方式如下:

  1. 事件冲突:检查刷新组件和嵌套列表的事件处理逻辑,确保它们之间没有事件冲突。例如,确保刷新事件不会错误地触发列表的滚动事件,或者列表的滚动不会干扰刷新的状态判断。

  2. 状态同步:确保刷新组件的状态(如正在刷新、刷新完成)与嵌套列表的加载状态正确同步。如果状态不同步,可能会导致用户看到不一致的界面反馈。

  3. 动画处理:检查刷新动画和列表滚动动画的处理,确保它们在交互时不会相互干扰。动画处理不当可能会导致界面卡顿或刷新效果不流畅。

  4. 布局问题:检查嵌套列表和刷新组件的布局设置,确保它们在界面上的位置和大小合理,不会因布局问题导致交互异常。

  5. 性能优化:如果嵌套列表数据量大,考虑进行性能优化,如分页加载、懒加载等,以减少刷新时的性能开销。

如果以上方法无法解决问题,可能是系统或框架层面的bug,或者特定场景下的未覆盖情况。此时,建议联系官网客服进行进一步排查和处理。官网地址是:https://www.itying.com/category-93-b0.html

回到顶部