HarmonyOS Scroll回调方法执行改变

执行了this.scrollerForList.scrollToIndex(5)后,目前版本不执行onDidScroll回调了,这是bug还是以后都不会执行了

@Entry
@Component
  //滚动控制器新增按给定速度执行惯性滚动的函数fling
struct ListExample {
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
  scrollerForList: Scroller = new Scroller()
  build() {
    Column() {
      Button('scrollToIndex-5')
        .height('5%')
        .onClick(() => {
          this.scrollerForList.scrollToIndex(5)
        })
      List({ space: 20, initialIndex: 0, scroller: this.scrollerForList }) {
        ForEach(this.arr, (item: number) => {
          ListItem() {
            Text('' + item)
              .width('100%').height(100).fontSize(16)
              .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
          }
        }, (item: string) => item)
      }
      .onDidScroll((scrollOffset: number, scrollState: ScrollState) => {
        console.info(`onScroll scrollState = ScrollState` + scrollState + `, scrollOffset = ` + scrollOffset)
      })
      .listDirection(Axis.Vertical) // 排列方向
      .scrollBar(BarState.Off)
      .friction(0.9)
      .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线
      .edgeEffect(EdgeEffect.Spring) // 边缘效果设置为Spring
      .width('90%')
    }
    .width('100%')
    .height('100%')
    .backgroundColor(0xDCDCDC)
    .padding({ top: 5 })
  }
}
HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

不执行的原因是因为没有使用scrollToIndex的动画,直接一帧调到对应的元素所以不触发,在ScrollToIndex的时候第二个参数加上true添加滚动动画就会触发回调 参考代码如下:

@Entry
@Component
  //滚动控制器新增按给定速度执行惯性滚动的函数fling
struct ListExample {
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
  scrollerForList: Scroller = new Scroller()
  build() {
    Column() {
      Button('scrollToIndex-5')
        .height('5%')
        .onClick(() => {
          this.scrollerForList.scrollToIndex(5,true)
        })
      List({ space: 20, initialIndex: 0, scroller: this.scrollerForList }) {
        ForEach(this.arr, (item: number) => {
          ListItem() {
            Text('' + item)
              .width('100%').height(100).fontSize(16)
              .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
          }
        }, (item: string) => item)
      }
      .onDidScroll((scrollOffset: number, scrollState: ScrollState) => {
        console.info(`onScroll scrollState = ScrollState` + scrollState + `, scrollOffset = ` + scrollOffset)
      })
      .listDirection(Axis.Vertical) // 排列方向
      .scrollBar(BarState.Off)
      .friction(0.9)
      .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线
      .edgeEffect(EdgeEffect.Spring) // 边缘效果设置为Spring
      .width('90%')
    }
    .width('100%')
    .height('100%')
    .backgroundColor(0xDCDCDC)
    .padding({ top: 5 })
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS @Watch方法没有改变
31浏览 • 1回复 待解决
HarmonyOS Scroll组件onScroll异常
18浏览 • 1回复 待解决
HarmonyOS Scroll组件事件问题
224浏览 • 1回复 待解决
如何通过AOP统计方法执行时间
673浏览 • 1回复 待解决
DevEco无法执行Previewer
612浏览 • 1回复 待解决
HarmonyOS zlib.compressFile不执行
50浏览 • 1回复 待解决
HarmonyOS onAreaChange方法问题
44浏览 • 1回复 待解决
@Watch装饰器的执行顺序
322浏览 • 1回复 待解决
HarmonyOS 点击事件的方法
49浏览 • 1回复 待解决
ForEach在真机上无法执行
1907浏览 • 1回复 待解决
NAPI执行上层时,如何获取env
2313浏览 • 1回复 待解决
HarmonyOS 组件是否有销毁方法
657浏览 • 1回复 待解决
如何在NAPI执行上层时获取env
370浏览 • 1回复 待解决