HarmonyOS 鸿蒙Next Hsp中的工具类传参跳转到page页面后,如何得到目标页面的返回参数

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

HarmonyOS 鸿蒙Next Hsp中的工具类传参跳转到page页面后,如何得到目标页面的返回参数

Hsp中的工具类传参跳转到page页面后,如何得到目标页面的返回参数

2 回复

可以参考如下方式实现界面切换,参数传递:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-navigation-transition-V5
使用Navigation 跳转界面 和 router跳转界面传参区别:Navigation传对象参数是传递引用,可以带上对应方法
outer传的对象是一个代理对象,会丢失源对象原型。
使用Navigation传参的示例如下,基于是上面router示例整改如下

import { Second } from './Second';

@Entry
@Component
struct Index {
  @Provide('pathInfos') pathInfos: NavPathStack = new NavPathStack();

  // Navigation的navDestination属性方法设置的构造函数,在路由栈变化时触发该构建数创建新的路由页面
  @Builder
  PageMap(name: string, paramsInfo: Uint8Array) {
    Second({ params: paramsInfo })
  }

  build() {
    Navigation(this.pathInfos) {
      Row() {
        Column() {
          Text('Index Page')
          Divider().strokeWidth(2).backgroundColor('red').margin(20)
          Button('Goto Second')
            .onClick(() => {
              let params = new Uint8Array([0, 1]);
              console.info('pushPathByName: ' + JSON.stringify(params))
              this.pathInfos.pushPathByName('Second', params, (data: PopInfo) => {
                console.info('data: ' + JSON.stringify(data.result)) // 这里获取到界面Pop回调结果
              })
            })
          Divider().strokeWidth(2).backgroundColor('red').margin(20)
        }
        .width('100%')
      }
      .height('100%')
    }
    .navDestination(this.PageMap)
    .width('100%')
    .mode(NavigationMode.Auto)
    .title('设置') // 设置标题文字
  }
}

@Entry
@Component
export struct Second {
  @Consume('pathInfos') pathInfos?: NavPathStack;
  @State message: string = 'Hello World';
  private params?: Uint8Array;

  build() {
    NavDestination() {
      Row() {
        Column() {
          Text('Second Page')
        }
        .width('100%')
      }
      .height('100%')
    }.title('Second')
    // 这里需要注意,由于组件内嵌容器,所以不会回调 onPageShow 和 onPageHide,在这里挂载一个回调即可
    .onShown(() => this.doPageShow())
    .onHidden(() => this.doPageHide())
    .onBackPressed(() => {
      this.pathInfos?.pop(new Uint8Array([0, 2])); // 构造参数回传给上一个界面
      return true;
    })
  }

  aboutToAppear(): void {
    console.log('aboutToAppear');
  }

  doPageShow(): void {
    console.log('onPageShow');
    console.log('0088 外层 uint8Arr', JSON.stringify(this.params));
    // uint8Arr 原型链被修改
    if (this.params) {
      console.log('0088 内层 uint8Arr', typeof this.params, this.params instanceof Uint8Array, this.params.length)
    }
  }

  doPageHide(): void {
    console.log('onPageHide');
  }

  aboutToDisappear(): void {
    console.log('aboutToDisappear');
  }
}

更多关于HarmonyOS 鸿蒙Next Hsp中的工具类传参跳转到page页面后,如何得到目标页面的返回参数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,通过Next Hsp工具类传参跳转到新页面并获取目标页面的返回参数,通常涉及以下几个步骤:

  1. 传参跳转:使用Next Hsp的API进行页面跳转时,可以通过Intent携带参数。确保在创建Intent时,使用putExtra方法将需要的参数放入Intent中。

  2. 目标页面接收参数:在目标页面的onStartonCreate方法中,通过getIntent()获取传递过来的Intent,并使用getStringExtragetIntExtra等方法提取参数。

  3. 返回参数处理:目标页面处理完业务逻辑后,如果需要返回参数给前一个页面,可以通过设置Intent的结果数据,并调用setResult方法。然后,通过finish方法结束当前页面,将数据返回给启动它的页面。

  4. 启动页面接收返回参数:在启动页面的onActivityResult方法中,通过返回的Intent获取目标页面传递回来的参数。

请确保在实现过程中,正确管理Intent和页面生命周期,以避免内存泄漏或数据丢失。

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

回到顶部