HarmonyOS鸿蒙Next中tabs组件销毁后其index对应的状态变量会被置为0
HarmonyOS鸿蒙Next中tabs组件销毁后其index对应的状态变量会被置为0
有大佬们知道这个activeIndex最开始是1,下滑改变flag后为啥也会将这个activeIndex变成0呢?只有第一次操作时会这样,实体设备上也会这样
// xxx.ets
@Entry
@Component
struct SwipeGestureExample {
@State activeIndex: number = 1;
@State searchFlag: boolean = false;
private tabsController: TabsController = new TabsController();
@Builder tabBuilder(selfIndex: number, icon: Resource, name: Resource) {
Column() {
Image(icon)
.width(32)
.height(32)
.fillColor(this.activeIndex === selfIndex ? '#c2e99607' : '#ff282323')
Text(name)
.fontSize(20)
.fontColor(this.activeIndex === selfIndex ? '#e9925f06' : '#ff292626')
}
.backgroundColor('#ffffff')
.opacity($r('app.float.common_opacity'))
.border({ width: 2, color: '#BBBBBB' })
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
// 点击切换至指定页签
.onClick(() => {
this.activeIndex = selfIndex;
})
}
build() {
Column() {
if (this.searchFlag) {
Column()
.width('100%')
.height('100%')
.backgroundColor(Color.Red)
.gesture(
PanGesture({ direction: PanDirection.Up })
.onActionStart(() => {
this.searchFlag = false
})
)
} else {
Tabs({ barPosition: BarPosition.End, index: this.activeIndex, controller: this.tabsController }) {
TabContent() {
Text('设置')
}
.tabBar(this.tabBuilder(0, $r("app.media.ic_collect"), $r('app.string.collect')))
TabContent() {
Text('主页')
}.tabBar(this.tabBuilder(1, $r('app.media.ic_home'), $r('app.string.home')))
TabContent() {
Text('设置')
}
.tabBar(this.tabBuilder(2, $r('app.media.ic_setting'), $r('app.string.setting')))
}
.width('100%')
.height('100%')
.barMode(BarMode.Fixed)
.barHeight($r('app.float.bar_height'))
.gesture(
PanGesture({ direction: PanDirection.Down })
.onActionStart(() => {
this.searchFlag = true
})
)
.onChange(index => {
this.activeIndex = index;
})
}
}.width('100%')
}
}
5 回复
使用tabs+tabContent切换也遇到这个问题~切换后大概1-2秒又会自动切换到首页~onchange方法返回的index又变回了0~楼主官方提供解决的方法了吗
更多关于HarmonyOS鸿蒙Next中tabs组件销毁后其index对应的状态变量会被置为0的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在API 9上这个问题没有解决,估计得要等到API 10了,你看看能不能通过其它的逻辑来限制这个index呢。
已确认是官方问题

补充一下:通过日志看是第一次销毁Tabs时其index会被置为0,后面就不会在销毁时再置为0
在HarmonyOS鸿蒙Next中,当tabs
组件被销毁时,其index
对应的状态变量会被重置为0。这是因为组件的生命周期结束时,其内部状态会被清理,恢复到初始值。如果你希望在组件销毁时保留index
的值,可以考虑将index
存储在更高层级的组件或全局状态管理中,以确保其值在组件销毁后仍然可用。