HarmonyOS 刷新Swiper里的数据时,index下标还是上一次的值

测试发现,刷新Swiper里的数据时,index下标还是上一次的值,请见demo代码:

@Entry  
@Component  
struct Index {  
  @State viewPagerData: Array<testBean> = new Array  
  @State viewPagerData2: Array<testBean> = new Array  
  @State update: boolean = false  
  aboutToAppear(): void {  
    for (let i = 0; i < 3; i++) {  
      let item = new testBean()  
      item.id = i  
      item.name = '第一组测试数据:' + i  
      this.viewPagerData.push(item)  
    }  
    for (let i = 0; i < 3; i++) {  
      let item = new testBean()  
      item.id = i  
      item.name = '第二组数据:' + i  
      this.viewPagerData2.push(item)  
    }  
  }  
  build() {  
    Column() {  
      Button('刷新数据')  
        .onClick(() => {  
          this.update = !this.update  
        })  
      Swiper() {  
        ForEach(this.update ? this.viewPagerData2 : this.viewPagerData, (item: testBean, index) => {  
          Text(item.name)  
            .width('100%')  
            .height('100%')  
            .backgroundColor(Color.Pink)  
        }, (item: testBean, index: number) => `${JSON.stringify(item)}_${index}`)  
      }  
      .cachedCount(0)  
      .loop(false)  
      .vertical(true)  
      .itemSpace(10)  
    }  
  }  
}  
export class testBean {  
  id?: number  
  name?: string  
}

期望结果:能否点击刷新按钮,刷新完成数据之后,Swiper初始化到第一个下标?应该如何实现?

HarmonyOS
2024-10-10 10:46:54
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

参考以下代码:

@Entry  
@Component  
struct Index {  
  @State viewPagerData: Array<testBean> = new Array  
  @State viewPagerData2: Array<testBean> = new Array  
  @State update: boolean = false  
  @State index: number = 0  
  aboutToAppear(): void {  
    for (let i = 0; i < 3; i++) {  
      let item = new testBean()  
      item.id = i  
      item.name = 'viewPagerData:' + i  
      this.viewPagerData.push(item)  
    }  
    for (let i = 0; i < 3; i++) {  
      let item = new testBean()  
      item.id = i  
      item.name = 'viewPagerData2:' + i  
      this.viewPagerData2.push(item)  
    }  
  }  
  build() {  
    Column() {  
      Button(this.update? 'viewPagerData2' : 'viewPagerData')  
        .onClick(() => {  
          this.update = !this.update  
          this.index = 0  
        })  
      Swiper() {  
        ForEach(this.update ? this.viewPagerData2 : this.viewPagerData, (item: testBean, index) => {  
          Text(item.name)  
            .width('100%')  
            .height('100%')  
            .backgroundColor(Color.Pink)  
        }, (item: testBean, index: number) => `${JSON.stringify(item)}_${index}`)  
      }  
      .index(this.index)  
      .cachedCount(0)  
      .loop(false)  
      .vertical(true)  
      .itemSpace(10)  
      .onChange((index) => {  
        this.index = index  
      })  
    }  
  }  
}  
export class testBean {  
  id?: number  
  name?: string  
}
分享
微博
QQ
微信
回复
2024-10-10 16:05:27
相关问题
HarmonyOS 每秒执行一次函数
148浏览 • 2回复 待解决
有没有一次编译,多端部署资料
341浏览 • 1回复 待解决
HarmonyOS里面不能一次创建多级目录
429浏览 • 1回复 待解决
订阅接近光传感器只出一次数据
1778浏览 • 1回复 待解决
动画如何做渲染一次不消失
7712浏览 • 1回复 待解决