HarmonyOS Tabs非首次选中页面能不能预加载?

主页面是4个tab tabContent构建的页面,首次进入主页面,默认加载index=0的页面,有没有办法不点击ab,让index=2的页面预加载(可执行aboutToAppear和build方法)?

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

参考示例demo:

class MyDataSource implements IDataSource {
  private list: number[] = []
  constructor(list: number[]) {
    this.list = list
  }

  totalCount(): number {
    return this.list.length
  }

  getData(index: number): number {
    return this.list[index]
  }

  registerDataChangeListener(listener: DataChangeListener): void {
  }

  unregisterDataChangeListener() {
  }
}

@Entry
@Component
struct Index {
  private swiperController: SwiperController = new SwiperController()
  private data: MyDataSource = new MyDataSource([])
  @State currentIndex: number = 1
  @State showSheet: boolean = false
  @State sheetHeight: number = 300;
  @State showDragBar: boolean = true;

  aboutToAppear(): void {
    let list: number[] = []
    for (let i = 1; i <= 1000; i++) {
      list.push(i);
    }
    this.data = new MyDataSource(list)
  }

  @Builder
  pager() {
    Grid() {
      LazyForEach(this.data, (item: number) => {
        GridItem() {
          Text(item.toString())
            .width(30)
            .height(30)
            .border({ width: 1, color: (this.currentIndex + 1) === item ? Color.Red : Color.Gray, radius: 15 })
            .textAlign(TextAlign.Center)
            .onClick(() => {
              this.currentIndex = item - 1
            })
        }
      }, (item: string) => item)
    }.columnsTemplate("1fr 1fr 1fr 1fr").rowsGap(8)
    .width("100%")
    .height("100%")
  }

  build() {
    Column() {
      Swiper(this.swiperController) {
        LazyForEach(this.data, (item: string) => {
          Text(item.toString())
            .width("100%")
            .height("100%")
            .backgroundColor(0xAFEEEE)
            .textAlign(TextAlign.Center)
            .fontSize(30)
        }, (item: string) => item)
      }
      .layoutWeight(1)
      .cachedCount(2)
      .index($$this.currentIndex)
      .indicator(false)
      .loop(true)
      .duration(300)
      .curve(Curve.Linear)

      Row({ space: 12 }) {
        Text(this.currentIndex + 1+"页,总计"+this.data.totalCount())
      }.margin(5)
      .onClick(() => {
        this.showSheet = true
      })
      .bindSheet($$this.showSheet, this.pager(), {
        height: this.sheetHeight,
        dragBar: this.showDragBar,
        onAppear: () => {
          console.log('BindSheet onAppear.')
        },
        onDisappear: () => {
          console.log('BindSheet onDisappear.')
        }
      })
    }.width('100%')
    .margin({ top: 5 })
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
@State能不能装饰接口
861浏览 • 1回复 待解决
HarmonyOS Camera_CaptureSession 能不能重用
430浏览 • 1回复 待解决
电脑能不能刷鸿蒙系统
15984浏览 • 14回复 待解决
华为能不能做个快捷指令?
7592浏览 • 1回复 待解决
File公有目录是不能不能创建 ?
2870浏览 • 1回复 待解决
HarmonyOS Tabs怎么实现加载
30浏览 • 1回复 待解决
鸿蒙左右下拉栏能不能互换?
16065浏览 • 4回复 待解决
这个在哪里关闭取消,能不能关闭啊
6778浏览 • 1回复 待解决
荣耀30pro能不能升级鸿蒙系统
7348浏览 • 1回复 待解决
荣耀30S能不能升级鸿蒙系统
9199浏览 • 1回复 待解决
opporeno5pro能不能装鸿蒙系统啊
9701浏览 • 1回复 待解决
升级鸿蒙系统后原来的app能不能
10637浏览 • 2回复 待解决
两SQL语句能不能用一个SQL搞定?
2855浏览 • 1回复 待解决
cmake编译的时候信息能不能多一些
597浏览 • 1回复 待解决
能不能让鸿蒙再早一点适配荣耀
5082浏览 • 4回复 待解决