鸿蒙开发:【启动指定页面】

启动指定页面

当PageAbility的启动模式设置为单例时(具体设置方法和典型场景示例见[PageAbility的启动模式],缺省情况下是单实例模式),若PageAbility已被拉起,再次启动PageAbility会触发onNewWant回调(即非首次拉起)。应用开发者可以通过want传递启动参数,例如开发者希望指定页面启动PageAbility,可以通过want中的parameters参数传递pages信息,具体示例代码如下:

调用方PageAbility的app.ets中或者page中,使用startAbility再次拉起PageAbility,通过want中的uri参数传递页面信息:

import featureAbility from '@ohos.ability.featureAbility';
import Want from '@ohos.app.ability.Want';
import hilog from '@ohos.hilog';const TAG: string = 'PagePageAbilityFirst';
const domain: number = 0xFF00;
(async (): Promise<void> => {let wantInfo: Want = {bundleName: 'com.samples.famodelabilitydevelop',abilityName: 'com.samples.famodelabilitydevelop.PageAbilitySingleton',parameters: { page: 'pages/second' }};featureAbility.startAbility({ want: wantInfo }).then((data) => {hilog.debug(domain, TAG, `restartAbility success : ${data}`);});
})()

在目标端PageAbility的onNewWant回调中获取包含页面信息的want参数:

// GlobalContext.ts 构造单例对象
export class GlobalContext {private constructor() {}private static instance: GlobalContext;private _objects = new Map<string, Object>();public static getContext(): GlobalContext {if (!GlobalContext.instance) {GlobalContext.instance = new GlobalContext();}return GlobalContext.instance;}getObject(value: string): Object | undefined {return this._objects.get(value);}setObject(key: string, objectClass: Object): void {this._objects.set(key, objectClass);}
}
import Want from '@ohos.app.ability.Want';
import featureAbility from '@ohos.ability.featureAbility';
import { GlobalContext } from '../utils/GlobalContext';class PageAbilitySingleton {onNewWant(want: Want) {featureAbility.getWant().then((want) => {GlobalContext.getContext().setObject('newWant', want);})}
}export default new PageAbilitySingleton();

在目标端页面的自定义组件中获取包含页面信息的want参数并根据uri做路由处理:

import Want from '@ohos.app.ability.Want';
import router from '@ohos.router';
import { GlobalContext } from '../../utils/GlobalContext';@Entry
@Component
struct First {onPageShow() {let newWant = GlobalContext.getContext().getObject('newWant') as Want;if (newWant) {if (newWant.parameters) {if (newWant.parameters.page) {router.pushUrl({ url: newWant.parameters.page as string});GlobalContext.getContext().setObject("newWant", undefined)}}}}build() {Column() {Row() {Text($r('app.string.singleton_first_title')).fontSize(24).fontWeight(FontWeight.Bold).textAlign(TextAlign.Start).margin({ top: 12, bottom: 11, right: 24, left: 24 })}.width('100%').height(56).justifyContent(FlexAlign.Start)Image($r('app.media.pic_empty')).width(120).height(120).margin({ top: 224 })Text($r('app.string.no_content')).fontSize(14).margin({ top: 8, bottom: 317, right: 152, left: 152 }).fontColor($r('app.color.text_color')).opacity(0.4)}.width('100%').height('100%').backgroundColor($r('app.color.backGrounding'))}
}

当PageAbility的启动模式设置为多实例模式或为首次启动单例模式的PageAbility时(具体设置方法和典型场景示例见[PageAbility的启动模式]),在调用方PageAbility中,通过want中的parameters参数传递要启动的指定页面的pages信息,调用startAbility()方法启动PageAbility。被调用方可以在onCreate中使用featureAbility的getWant方法获取want,再通过调用router.pushUrl实现启动指定页面。

调用方的页面中实现按钮点击触发startAbility方法启动目标端PageAbility,startAbility方法的入参want中携带指定页面信息,示例代码如下:

import featureAbility from '@ohos.ability.featureAbility';
import Want from '@ohos.app.ability.Want';
import { BusinessError } from '@ohos.base';
import fs from '@ohos.file.fs';
import promptAction from '@ohos.promptAction';
import worker from '@ohos.worker';
import hilog from '@ohos.hilog';const TAG: string = 'PagePageAbilityFirst';
const domain: number = 0xFF00;@Entry
@Component
struct PagePageAbilityFirst {build() {Column() {//...List({ initialIndex: 0 }) {//...ListItem() {Flex({ justifyContent: FlexAlign.SpaceBetween, alignContent: FlexAlign.Center }) {//...}.onClick(() => {let want: Want = {bundleName: 'com.samples.famodelabilitydevelop',abilityName: 'com.samples.famodelabilitydevelop.PageAbilityStandard',parameters: { page: 'pages/first' }};featureAbility.startAbility({ want: want }).then((data) => {hilog.info(domain, TAG, `startAbility finish:${data}`);}).catch((err: BusinessError) => {hilog.info(domain, TAG, `startAbility failed errcode:${err.code}`);})})}//...ListItem() {Flex({ justifyContent: FlexAlign.SpaceBetween, alignContent: FlexAlign.Center }) {//...}.onClick(() => {let want: Want = {bundleName: 'com.samples.famodelabilitydevelop',abilityName: 'com.samples.famodelabilitydevelop.PageAbilityStandard',parameters: { page: 'pages/second' }};featureAbility.startAbility({ want: want }).then((data) => {hilog.info(domain, TAG, `startAbility finish:${data}`);}).catch((err: BusinessError) => {hilog.info(domain, TAG, `startAbility failed errcode:${err.code}`);})})}//...}//...}//...}
}

目标端PageAbility的onCreate生命周期回调中通过featureAbility的getWant方法获取want,并对参数进行解析,实现指定页面拉起:

import featureAbility from '@ohos.ability.featureAbility';
import router from '@ohos.router';class PageAbilityStandard {onCreate() {featureAbility.getWant().then((want) => {if (want.parameters) {if (want.parameters.page) {router.pushUrl({ url: want.parameters.page as string });}}})}
}export default new PageAbilityStandard();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/855254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CVPR2021】LoFTR:基于Transformers的无探测器的局部特征匹配方法

LoFTR&#xff1a;基于Transformers的局部检测器 0. 摘要 我们提出了一种新的局部图像特征匹配方法。我们建议先在粗略级别建立像素级密集匹配&#xff0c;然后再在精细级别细化良好匹配&#xff0c;而不是按顺序进行图像特征检测、描述和匹配。与使用成本体积搜索对应关系的密…

oracle12c到19c adg搭建(二)oracle12c数据库软件安装

运行安装程序 不勾选 只安装软件 选择单实例安装 选择语言 企业版 确认目录 产品目录 用户组 开始安装 执行root脚本 [rooto12u19p software]# /u01/app/oraInventory/orainstRoot.sh Changing permissions of /u01/app/oraInventory. Adding read,write permissions for gro…

CVPR2024 分割Segmentation相关论文37篇速览

Paper1 MFP: Making Full Use of Probability Maps for Interactive Image Segmentation 摘要小结: 最近的交互式分割算法中&#xff0c;将先前的概率图作为网络输入&#xff0c;以帮助当前分割轮次的预测。然而&#xff0c;尽管使用了先前的掩膜&#xff0c;概率图中包含的有…

OpenAI 开源的语音技术 Whisper 真棒!!!

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

字节豆包大模型API吞吐、函数调用能力、长上下文能力测试总结

离开模型能力谈API价格都是耍流氓&#xff0c;豆包大模型作为API最便宜的模型之一&#xff0c;最近向个人开发者开放了&#xff0c;花了300元和一些时间对模型的API吞吐、函数调用能力、长上下文能力等进行了深度测试&#xff0c;看看它的能力究竟适合做 AI 应用开发吗&#xf…

“代码铸梦:一位程序员的CSDN创作纪念日回望与展望“

缘起&#xff1a;一程代码&#xff0c;一场梦 在编码的世界里&#xff0c;每一次指尖的跳跃都是对未知的探索&#xff0c;每一个字符的敲击都是与逻辑的对话。我的创作之旅&#xff0c;始于一次偶然的实战项目经历。那时&#xff0c;面对复杂的业务逻辑和紧迫的截止日期&#…

【Anaconda】【Windows编程技术】【Python】Anaconda的常用命令及实操

一、Anaconda终端 在安装Anaconda后&#xff0c;电脑上会新增一个Anaconda终端&#xff0c;叫Anaconda Prompt&#xff0c;如下图&#xff1a; 我们选择“打开文件位置”&#xff0c;将快捷方式复制一份到桌面上&#xff0c;这样日后就可以从桌面上方便地访问Anaconda终端了&…

用python实现多文件多文本替换功能

用python实现多文件多文本替换功能 今天修改单位项目代码时由于改变了一个数据结构名称&#xff0c;结果有几十个文件都要修改&#xff0c;一个个改实在太麻烦&#xff0c;又没有搜到比较靠谱的工具软件&#xff0c;于是干脆用python手撸了一个小工具&#xff0c;发现python在…

微服务中的相关概念

Eureka Eureka 是由 Netflix 开发的一个服务发现和注册中心&#xff0c;广泛应用于微服务架构中。Eureka 主要用于管理和协调分布式服务的注册和发现&#xff0c;确保各个服务之间能够方便地找到并通信。它是 Netflix OSS&#xff08;Netflix Open Source Software&#xff09…

【绝对有用】c++线程池相关技术点二

这行代码是C多线程编程中的一种常见用法&#xff0c;具体地&#xff0c;它使用std::thread创建一个新的线程&#xff0c;并将该线程加入到一个std::vectorstd::thread容器中。下面是对这行代码的详细解释&#xff1a; threads&#xff1a;这是一个std::vectorstd::thread类型的…

C#心跳机制客户端

窗体&#xff08;richTextBox右显示聊天&#xff09; 步骤 点击链接按钮 tcpclient客户端步骤 1创建客户端对象 2连接服务器connect 3创建网络基础流发消息 .write发消息 4 创建网络基础流接消息 .read接消息 5 断开连接…

062、Python 解决命名冲突的两种方式

如下&#xff0c;在一个包里的两个模块分别定义了一个名称一样的函数&#xff1a; 包结构与模块内容&#xff1a; my_package/__init__.pymodule1.pymodule2.py模块一代码&#xff1a;module1.py def say_Hello():print("Hi!")模块二代码&#xff1a;module2.py …

python库离线安装方法(pyqt5离线安装方法)

在某些情况下&#xff0c;我们的计算机是无法联网的。 网上大部分方法&#xff1a; 这些方法都有个问题&#xff0c;就是库是需要依赖其它库的&#xff0c;你不知道它需要依赖什么库&#xff0c;就是提供了依赖库的列表也麻烦&#xff0c;依赖库也是有对应版本要求的&#xf…

自制调色小工具给图片加滤镜,修改图片红、绿、蓝通道及亮度,修改图片颜色

上篇&#xff1a; 上篇我们给地图添加了锐化、模糊等滤镜&#xff0c;这篇来写一个小工具给图片调色。 调色比锐化等滤镜要简单许多&#xff0c;直接拿到像素值修改即可。不需要用到卷积核。。。(*^▽^*) 核心原理就是图像结构&#xff0c;使用context.getImageData获取图像像…

JavaScript练手小技巧:JS 随机数小技巧

JS 里利用 Math.random() 可以产生0-1 之间的随机小数。如&#xff1a; let num1 Math.random(); // 0-1之间的随机数console.log(num1);// 0.05563019650398182 可以用随机数做一些有趣的事情。 一、指定范围的随机整数 // 随机整数function randomInt(min, max) {return …

cad怎么转成pdf文件?方法很简单!

cad怎么转成pdf文件&#xff1f;在数字化时代&#xff0c;CAD图纸的转换与共享已成为日常工作中的常态。无论是建筑设计师、工程师还是学生&#xff0c;都可能遇到需要将CAD文件转换为PDF格式的需求。本文将为您推荐三款高效的CAD转PDF软件&#xff0c;让您轻松实现文件格式的转…

【代码随想录算法训练Day35】LeetCode 1005. K 次取反后最大化的数组和、LeetCode 134.加油站、LeetCode 135.分发糖果

Day35 贪心第三天 LeetCode 1005. K 次取反后最大化的数组和 两步贪心&#xff0c;解决问题&#xff1a; 1.优先取反绝对值最大的负数 2.如果所有的数都非负了&#xff0c;就用绝对值最小的整数消耗掉剩余的k。 class Solution { public:static bool cmp(int a,int b){retur…

C++ 48 之 继承的基本语法

#include <iostream> #include <string> using namespace std;// 定义一个基类&#xff0c;把公共的部分写在这里&#xff0c;以后让别的类继承即可 class BasePage{ public:void header(){cout << "公共的头部"<< endl;}void footer(){cout…

STM32单片机-BKP和RTC

STM32单片机-BKP和RTC 一、Unix时间戳1.1 时间戳转换 二、BKP(备份寄存器)三、RTC(实时时钟)3.1 RTC工作原理 四、代码部分4.1 BKP备份寄存器4.2 RTC实时时钟 一、Unix时间戳 Unix时间戳定义为从伦敦时间的1970年1月1日0时0分0秒开始所经过的秒数&#xff0c;不考虑闰秒时间戳…

vue3使用echarts简单教程~~概念篇

没写过 写着玩玩 不足的地方还望小伙伴补充~~ 概念篇 文档奉上&#xff1a;数据集 - 概念篇 - 使用手册 - Apache EChartshttps://echarts.apache.org/handbook/zh/concepts/dataset <template><div id"main" style"width: 600px; height: 400px&…