HarmonyOS 如何实现类似startActivityForResult?

关闭当前页面,返回上个页面中,并且能传递当前页面的数据到上个页面中(不需要用到状态管理的实现方式,通过接口传递方式有没有)

阅读 503
1 个回答

可以使用【页面级UI状态存储】https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-localstorage-V5

或者使用Emitter进行数据传递,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/itc-with-emitter-V5

如果是用router传参数可以参考如下实现:

har包下第一个界面:FirstHarPage

import router from '@ohos.router';
import { CustomButton } from '../../common/CustomButton';

import('../secondharpage/SecondHarPage')

@Entry({ routeName: 'FirstHarPage' })
@Component
export struct FirstHarPage {
  onPageShow(): void {
    let backParams = router.getParams() as RouteParams;
    console.info('onPageShow: ' + JSON.stringify(backParams));
    backParams.hasBackValue = false;
  }

  build() {
    Row() {
      Column() {
        Text('FirstHarPage').fontSize(36).textAlign(TextAlign.Center).width('100%')
        CustomButton({ mTitle: '跳转到第二个界面' }).onClick(() => {
          let routeParams = new RouteParams('value1', 'value2');
          router.pushNamedRoute({ name: 'SecondHarPage', params: routeParams })
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

export class RouteParams {
  constructor(key1: string, key2: string) {
    this.key1 = key1;
    this.key2 = key2;
  }

  public key1?: string;
  public key2?: string;
  public hasBackValue: boolean = false;
}

har包下第二个界面:SecondHarPage
import router from '@ohos.router';
import { RouteParams } from '../firstharpage/FirstHarPage';

@Entry({ routeName: 'SecondHarPage' })
@Component
export struct SecondHarPage {
  @State message: string = 'Hello World';

  onPageShow(): void {
    let params = router.getParams() as RouteParams;
    console.info('aboutToAppear: ' + JSON.stringify(params));
  }

  build() {
    Row() {
      Column() {
        Text(this.message.fontSize(50).fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }

  onBackPress(): boolean | void {
    let backParams = new RouteParams('backValue1', 'backvalue2');
    backParams.hasBackValue = true;
    router.back({ url: '', params: backParams })
    return true;
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进