HarmonyOS 鸿蒙Next 使用Tabs其中某一项点击跳转到指定页面而非切换 如何实现及阻止默认点击事件执行逻辑
HarmonyOS 鸿蒙Next 使用Tabs其中某一项点击跳转到指定页面而非切换 如何实现及阻止默认点击事件执行逻辑
tabBar没有点击拦截功能实现,可以使用TabsController自定义页签以及并在其中添加事件进行逻辑判断,可以参考以下demo:
export class ButtonInfoModel {
index: number = 0;
info: string = 'home';
title: string = 'Home';
}
const buttonInfo: ButtonInfoModel[] =
[{ index: 0, info: 'home', title: 'Home' }, { index: 1, info: 'map', title: 'Map' },
{ index: 2, info: 'charging', title: 'Charging' }]
[@Component](/user/Component)
export struct Home {
[@State](/user/State) message: string = 'Home';
build() {
Row() {
Column() {
Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)
Text('点击之后无法进入charging页,会跳转map页').fontSize(20).fontWeight(FontWeight.Bold).onClick(() => {
buttonInfo[2].info = "map"
})
}.width('100%')
}.height('100%')
}
}
[@Component](/user/Component)
export struct Map {
[@State](/user/State) message: string = 'Map';
build() {
Row() {
Column() {
Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)
}.width('100%')
}.height('100%')
}
}
[@Component](/user/Component)
export struct Charging {
[@State](/user/State) message: string = 'Charging';
build() {
Row() {
Column() {
Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)
}.width('100%')
}.height('100%')
}
} /******/
[@Entry](/user/Entry)
[@Component](/user/Component)
struct home {
[@StorageProp](/user/StorageProp)('currentBreakpoint') currentBreakpoint: string = 'sm';
[@State](/user/State) currentPageIndex: number = 0;
[@State](/user/State) tabArray: Array<number> = [0, 1, 2]
private controller: TabsController = new TabsController()
build() {
Column() {
Tabs({ barPosition: BarPosition.End, controller: this.controller }) {
TabContent() {
Home()
}
TabContent() {
Map()
}
TabContent() {
Charging()
}
}.barHeight('0vp').height('94%').vertical(this.currentBreakpoint === 'lg').scrollable(false)
this.bottomNavigation()
}.justifyContent(FlexAlign.SpaceBetween).backgroundColor("#f1f3f5")
}
[@Builder](/user/Builder)
bottomNavigation() {
Row() {
ForEach(this.tabArray, (item: number) => {
this.BottomNavigation(buttonInfo[item])
})
}.height("50vp").backgroundColor(Color.White).justifyContent(FlexAlign.SpaceAround).width("100%")
}
[@Builder](/user/Builder)
BottomNavigation(button: ButtonInfoModel) {
Column({ space: '10vp' }) {
Text(button.title)
.fontColor(this.currentPageIndex === button.index ? "#0587D7" : "#A5A9AD")
.fontWeight(500)
.textAlign(TextAlign.Center)
.fontSize('10fp')
}.alignItems(HorizontalAlign.Center).margin(-20).onClick(() => {
if (button.index === 2 && button.info === 'map') {
this.controller.changeIndex(1)
this.currentPageIndex = 1
} else {
this.controller.changeIndex(button.index)
this.currentPageIndex = button.index
}
})
}
}
更多关于HarmonyOS 鸿蒙Next 使用Tabs其中某一项点击跳转到指定页面而非切换 如何实现及阻止默认点击事件执行逻辑的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,若想在Tabs组件中点击某一项时跳转到指定页面而非切换,你可以通过以下方式实现及阻止默认点击事件执行逻辑:
-
自定义点击事件:为Tabs的每一项设置自定义的点击事件监听器。在监听器中,不执行默认的切换逻辑,而是执行页面跳转。
-
页面跳转:使用
Intent
进行页面跳转。创建目标页面的Intent
,并调用startAbility
方法启动目标页面。 -
阻止默认行为:在自定义点击事件监听器中,通过返回
true
或调用特定的方法(如consumeEvent()
,具体取决于API设计)来阻止Tabs组件的默认点击事件执行逻辑。
示例代码片段(伪代码):
tabItem.setClickedListener((component, event) -> {
// 创建目标页面的Intent
Intent intent = new Intent();
intent.setElement(new ElementName("your_package_name", "your_ability_name"));
// 启动目标页面
startAbility(intent);
// 阻止默认点击事件
return true; // 或调用consumeEvent()方法,具体取决于API
});
注意:实际代码中,setClickedListener
、startAbility
等方法的调用及参数可能因HarmonyOS版本及API设计有所差异。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html