HarmonyOS 鸿蒙Next startActivityForResult

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

HarmonyOS 鸿蒙Next startActivityForResult 大家知道在鸿蒙中如何实现类似安卓中的startActivityForResult,这种能力吗?

2 回复

可以使用【页面级UI状态存储】[LocalStorage:页面级UI状态存储-管理应用拥有的状态-状态管理(V1)-状态管理-学习ArkTS语言-基础入门 - 华为HarmonyOS开发者 (huawei.com)] 或者使用Emitter进行数据传递,参考链接:[使用Emitter进行线程间通信-线程间通信-应用事件-Basic Services Kit(基础服务)-基础功能-系统 - 华为HarmonyOS开发者 (huawei.com)] 如果是用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;
  }
}

更多关于HarmonyOS 鸿蒙Next startActivityForResult的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,startActivityForResult 方法用于从一个Activity启动另一个Activity,并期望从后者获取结果。这与Android中的用法类似,但在鸿蒙系统中,实现细节和API可能有所不同。

鸿蒙系统中,若要实现startActivityForResult的功能,你通常会使用Intent来携带数据和指令,启动目标Activity。在目标Activity中处理完数据后,通过setResult方法将数据返回给启动它的Activity。启动Activity需要实现一个回调接口,用于接收返回的结果。

具体步骤如下:

  1. 在启动Activity中:创建一个Intent,设置目标Activity的组件信息,并调用startAbilityForResult方法启动目标Activity(注意这里是startAbilityForResult,与Android的startActivityForResult略有不同)。

  2. 在目标Activity中:处理完数据后,使用setResult方法设置返回码和数据,然后调用finish方法结束Activity,返回数据。

  3. 在启动Activity的回调中:重写处理返回结果的回调方法(如onAbilityResult),接收并处理返回的数据。

请注意,鸿蒙系统的API可能会随着版本更新而变化,具体实现细节请参考最新的鸿蒙开发文档。

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

回到顶部