HarmonyOS TabContent内容如何手动刷新

如图Refresh里包含着Tabs,现在需求是当Refresh刷新后要重置Tabs内的数据,怎么重置?

HarmonyOS  TabContent内容如何手动刷新 -鸿蒙开发者社区

HarmonyOS  TabContent内容如何手动刷新 -鸿蒙开发者社区

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

tab暂无类似功能,可通过if/else:条件渲染的机制,来实现组件的删除/创建,参考示例如下:

// xxx.ets
@Entry
@Component
struct RefreshExample {
  @State isRefreshing: boolean = false
  @State fontColor: string = '#182431'
  @State selectedFontColor: string = '#007DFF'
  @State currentIndex: number = 0
  private controller: TabsController = new TabsController()
  @State arr: string[] = ['green', 'blue', 'yellow', 'pink']
  @State isShow: boolean = true
  @Builder
  tabBuilder(index: number, name: string) {
    Column() {
      Text(name)
        .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
        .fontSize(16)
        .fontWeight(this.currentIndex === index ? 500 : 400)
        .lineHeight(22)
        .margin({ top: 17, bottom: 7 })
      Divider()
        .strokeWidth(2)
        .color('#007DFF')
        .opacity(this.currentIndex === index ? 1 : 0)
    }.width('100%')
  }

  @Builder
  tabMain() {
    Row() {
      Tabs({ barPosition: BarPosition.Start, index: this.currentIndex, controller: this.controller }) {
        ForEach(this.arr, (item: string, index) => {
          TabContent() {
            tabContentInfo({ text: item })
          }.tabBar(this.tabBuilder(index, (index + 1).toString()))
        })
      }
      .vertical(false)
      .barMode(BarMode.Fixed)
      .barWidth(360)
      .barHeight(56)
      .animationDuration(400)
      .onChange((index: number) => {
        this.currentIndex = index
      })
      .backgroundColor('#F1F3F5')
    }
    .width('100%')
    .height('100%')
  }

  build() {
    Column() {
      Refresh({ refreshing: $$this.isRefreshing }) {
        if (this.isShow) {
          this.tabMain()
        } else {
          this.tabMain()
        }
      }
      .onStateChange((refreshStatus: RefreshStatus) => {
        // console.info('Refresh onStatueChange state is ' + refreshStatus)
      })
      .onOffsetChange((value: number) => {
        // console.info('Refresh onOffsetChange offset:' + value)
      })
      .onRefreshing(() => {
        setTimeout(() => {
          this.isRefreshing = false
          this.isShow = !this.isShow
        }, 2000)
        console.log('onRefreshing test')
      })
      .backgroundColor(0x89CFF0)
      .refreshOffset(64)
      .pullToRefresh(true)
    }
  }
}

@Component
export struct tabContentInfo {
  @Prop text: string

  aboutToAppear(): void {
    console.info("进入aboutToAppear:", this.text)
  }

  build() {
    Column() {
      Text(this.text)
      Button('改变')
        .onClick(() => {
          this.text += '-'
        })
    }
    .width("100%")
    .height("100%")
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS @Builder的内容如何刷新
81浏览 • 1回复 待解决
前端手动刷新显示Rdb数据
841浏览 • 1回复 待解决
HarmonyOS服务卡片能否手动调方法刷新
372浏览 • 1回复 待解决
TabContent 内容的生命周期
438浏览 • 1回复 待解决
如何手动重启 OceanBase 集群?
5294浏览 • 1回复 待解决
HarmonyOS TabContent
506浏览 • 1回复 待解决
HarmonyOS如何实现相机手动对焦
436浏览 • 1回复 待解决
HarmonyOS 请问TabContent如何与page绑定?
672浏览 • 1回复 待解决
HarmonyOS如何手动重置自定义组件?
405浏览 • 1回复 待解决
HarmonyOS如何手动让应用进入后台?
157浏览 • 0回复 待解决