【每日学点HarmonyOS Next知识】网络请求回调toast问题、Popup问题、禁止弹窗返回、navigation折叠屏不显示返回键、响应式布局

embedded/2025/3/4 21:52:31/

【每日学点HarmonyOS Next知识】网络请求回调toast问题、Popup问题、禁止弹窗返回、navigation折叠屏不显示返回键、响应式布局

1、HarmonyOS http请求回调后,showToast报错?

使用http.HttpRequest.request发起http请求后,在promise的then回调里执行自定义回调函数,但是回调到页面代码后,调用toast会报错[ArkRuntime Log] Error: Internal error. UI execution context not found.

操作步骤:
1、http.createHttp();创建请求
2、request.request;发起请求
3、promise.then中处理数据然后执行回调函数
4、回调函数中使用promptAction.showToast进行输出toast

根据报错信息:Internal error. UI execution context not found.是在调用promptAction.showToast接口时,接口识别到场景下UI实例缺失主动抛出的。绑定UI实例来调用接口,同时进行合理的try catch异常捕捉。 demo如下:

@Entry
@Component
struct Index {@State message: string = '从窗口实例中获取UI实例,通过UI实例使用接口';aboutToAppear(): void {setTimeout(() => {//抓取异常try {this.getUIContext().getPromptAction().showToast({ message: '弹窗测试', duration: 2000 })} catch (e) {console.error("弹窗异常,异常信息:" + JSON.stringify(e))}}, 1000)}build() {Column() {Text(this.message).id('HelloWorld').fontSize(15).fontWeight(FontWeight.Bold).textAlign(TextAlign.Center).width('100%')}.width('100%')}
}
2、HarmonyOS Button上使用bindPopup,里面是一个自定义的组件展示内容,展示内容怎么能根据外部的变量动态展示呢?

Button上使用bindPopup,里面是一个自定义的组件展示内容,请问展示内容怎么能根据外部的变量动态展示呢

因为bindPopup里非@component的子组件,所以无法使用@state和@link声明式变量进行传递和更新。可以使用AppStorage,对某一个收藏夹的是否公开属性进行新建或更新,使用为AppStorage.SetOrCreate(‘album_id’, this.pub ? ‘0’ : “1”),然后在实现bindPopup时通过声明@StorageLink(‘Album_id’) pub:string = ‘0’ 进行同步更新,获取数据并使用。

Demo:

export enum PopoverItemType {Default,AddVideo,ManageVideo,ModifyName,ModifyPrivacy,DeleteFolder
}export interface PopoverItem {title: stringtype: PopoverItemType
}@Component
export struct CollectionManageMenu {@State popoverItemList1: PopoverItem[] = []@State popoverItemList2: PopoverItem[] = []@StorageLink('pub') pub: string = '0'aboutToAppear(): void {this.popoverItemList1 = [{title: '添加视频',type: PopoverItemType.AddVideo},{title: '批量管理视频',type: PopoverItemType.ManageVideo},{title: '修改名称',type: PopoverItemType.ModifyName},{//TODO:文案要根据状态动态改变title: '设置为私密',type: PopoverItemType.ModifyPrivacy},{title: '删除收藏夹',type: PopoverItemType.DeleteFolder}]this.popoverItemList2 = [{title: '添加视频',type: PopoverItemType.AddVideo},{title: '批量管理视频',type: PopoverItemType.ManageVideo},{title: '修改名称',type: PopoverItemType.ModifyName},{//TODO:文案要根据状态动态改变title: '设置为公开',type: PopoverItemType.ModifyPrivacy},{title: '删除收藏夹',type: PopoverItemType.DeleteFolder}]}build() {Column() {List() {ForEach(this.pub == '0' ? this.popoverItemList1 : this.popoverItemList2, (item: PopoverItem, index) => {ListItem() {Text(item.title)}.height(52).padding({left: 16,right: 16,top: 14,bottom: 14}).onClick(() => {})}, (item: PopoverItem) => JSON.stringify(item.title))}.width('100%').scrollBar(BarState.Off)}.width(161).alignItems(HorizontalAlign.Center).borderRadius(8)}
}@Entry
@Component
export struct CollectionDetailPageNavBar {@State showPopover: boolean = false@State pub: boolean = true@BuildermanageMenu() {CollectionManageMenu()}build() {Column() {Button('管理').width(62).height(32).borderRadius(16).fontSize(15).onClick(() => {this.showPopover = !this.showPopover}).bindPopup(this.showPopover,{builder: () => {this.manageMenu()},radius: 8,enableArrow: true,placement: Placement.BottomLeft,targetSpace: 20,offset: { x: -6 },onStateChange: (event) => {if (!event.isVisible) {this.showPopover = false}}})Button('改变私密/公开状态').width(62).height(32).borderRadius(16).fontSize(15).onClick(() => {this.pub = !this.pubAppStorage.SetOrCreate('pub', this.pub ? '0' : "1")})}}
}
3、HarmonyOS 如何禁止自定义弹窗返回键关闭?

@Entry修饰的组件能获取返回事件的监听,可以通过重写onBackPress监听到返回事件的按下。

4、HarmonyOS 使用navigation 方式加载页面,折叠屏全屏二级页面第一个页面不显示返回按钮?

一级页面 是通过 router.pushUrl 跳转到 二级页面的,二级页面是使用Navigation方法写的,二级页面的第一个页面跳转到二级页面的第二个页面是通过this.pageInfos.pushPathByName() 方法跳转的。

关于这个问题:Navigation在使用时hideBackButton隐藏标题栏中的返回键。 不支持隐藏NavDestination组件标题栏中的返回键默认值:false

true: 隐藏返回键。false: 显示返回键。说明:返回键仅针对titleMode为NavigationTitleMode.Mini时才生效

对应文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navigation-V5

5、HarmonyOS 页面布局如何能根据显示大小做到同步缩放?

可使用响应式布局动态调整页面,请参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/responsive-layout-V5

自适应布局可以保证窗口尺寸在一定范围内变化时,页面的显示是正常的。但是将窗口尺寸变化较大时(如窗口宽度从400vp变化为1000vp),仅仅依靠自适应布局可能出现图片异常放大或页面内容稀疏、留白过多等问题,此时就需要借助响应式布局能力调整页面结构。

响应式布局是指页面内的元素可以根据特定的特征(如窗口宽度、屏幕方向等)自动变化以适应外部容器变化的布局能力。响应式布局中最常使用的特征是窗口宽度,可以将窗口宽度划分为不同的范围(下文中称为断点)。当窗口宽度从一个断点变化到另一个断点时,改变页面布局(如将页面内容从单列排布调整为双列排布甚至三列排布等)以获得更好的显示效果。


http://www.ppmy.cn/embedded/170014.html

相关文章

sql学习笔记(二)

在 SQL 中,using 和 on 是用于连接(join)操作的关键字,它们都用于指定连接条件,但它们在语法和使用场景上有一些区别。以下是它们的详细对比: 一. on关键字 定义 on是最常用的连接条件关键字&#xff0c…

IP属地是通过卫星定位的吗?如何保护用户隐私

在数字时代,网络空间成为了人们日常生活不可或缺的一部分。随着社交媒体、在线服务等平台的兴起,用户IP属地信息的重要性日益凸显。然而,关于IP属地是如何确定的,尤其是是否通过卫星定位这一问题,却常常引发公众的疑问…

GCC RISCV 后端 -- GCC 构建系统简介

前文提过&#xff0c;GNU 的项目一般都是使用 GNU Autotools 来实现它们的构建系统&#xff0c;其主要目的是通过 GNU Autotools 对不同平台&#xff08;Target Triple: <CPU ARCH>-<Vendor>-<OS>-<ABI>&#xff09;进行抽象&#xff0c;使得GNU Autot…

构建私有化AI知识库:基于CentOS的Ollama + DeepSeek-R1 +ragflow 整合部署教程

操作系统&#xff1a;CentOS 7.9 CPU&#xff1a;支持 AVX 指令集的 x86_64 处理器 内存&#xff1a;64GB 存储&#xff1a;SSD 1TB 以上 GPU&#xff08;可选&#xff09; 一、组件介绍 Ollama Ollama 是一个专为在本地机器上部署和运行大型语言模型&#xff08;LLM&a…

Unity3D Cinemachine 高级应用详解

引言 Cinemachine 是 Unity3D 中一个强大的相机管理系统&#xff0c;它允许开发者通过简单的配置实现复杂的相机行为。Cinemachine 的核心思想是基于虚拟相机&#xff08;Virtual Camera&#xff09;&#xff0c;通过虚拟相机的优先级、混合、跟随、注视等设置&#xff0c;实现…

ADC采集模块与MCU内置ADC性能对比

2.5V基准电压源&#xff1a; 1. 精度更高&#xff0c;误差更小 ADR03B 具有 0.1% 或更小的初始精度&#xff0c;而 电阻分压方式的误差主要来自电阻的容差&#xff08;通常 1% 或 0.5%&#xff09;。长期稳定性更好&#xff0c;分压电阻容易受到温度、老化的影响&#xff0c;长…

CyberRT(apollo) 定时器模块简述及bug分析

timer 模块 timer的定义&#xff0c;cyberrt中timer模块用于设置定时器任务&#xff0c;字面意思&#xff0c;设置设置定时周期及出发频次&#xff08;周期 or oneshot)&#xff0c;到达指定时间时间触发callback time wheel 时钟节拍轮&#xff0c;常见的定时器设计&#x…

机器学习基础概念详解:从入门到应用

在机器学习领域&#xff0c;掌握基础概念是理解复杂模型和应用场景的关键。本文将以简洁的方式介绍机器学习的核心概念&#xff0c;帮助读者快速构建知识框架。 一、数据集的划分&#xff1a;训练集、验证集与测试集 1. 训练集&#xff08;Training Set&#xff09; 用途&…