HarmonyOS 鸿蒙Next 使用Tabs其中某一项点击跳转到指定页面而非切换 如何实现及阻止默认点击事件执行逻辑

发布于 1周前 作者 nodeper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 使用Tabs其中某一项点击跳转到指定页面而非切换 如何实现及阻止默认点击事件执行逻辑

使用Tabs其中的某一项点击我需要跳转到某一页面而不是切换,这种如何实现?能不能阻止点击事件的默认执行逻辑

2 回复

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组件中点击某一项时跳转到指定页面而非切换,你可以通过以下方式实现及阻止默认点击事件执行逻辑:

  1. 自定义点击事件:为Tabs的每一项设置自定义的点击事件监听器。在监听器中,不执行默认的切换逻辑,而是执行页面跳转。

  2. 页面跳转:使用Intent进行页面跳转。创建目标页面的Intent,并调用startAbility方法启动目标页面。

  3. 阻止默认行为:在自定义点击事件监听器中,通过返回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
});

注意:实际代码中,setClickedListenerstartAbility等方法的调用及参数可能因HarmonyOS版本及API设计有所差异。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部