HarmonyOS开发日记 :自定义节点,实现 UI 组件 动态创建、更新

引言

UI动态操作包含组件的动态创建、卸载、更新等相关操作。

通过组件预创建,可以满足开发者在非build生命周期中进行组件创建,创建后的组件可以进行属性设置、布局计算等操作。之后在页面加载时进行使用,可以极大提升页面响应速度。

UI 动态操作(创建、显示、更新)

下面是一个简单的示例:

通过 BuilderNode + NodeController + Builder 使用 UI 动态操作。

    1. 准备好需要挂载的节点及要绑定的数据模型
// 要绑定的数据模型
class Params {text: string = ''constructor(text: string) {this.text = text}
}// 这个就是我们要挂载的节点内容
@Builder
function customNodeBuilder(params: Params) {Column() {Text(params.text).fontSize(25).margin({ bottom: 15 })}
}
    1. 封装 controller 用于实现自定义节点的创建、显示、更新等操作
class CustomNodeController extends NodeController {private customNode: BuilderNode<[Params]> | null = null;private message: string = "";constructor(message: string) {super()this.message = message}makeNode(context: UIContext): FrameNode | null {this.customNode = new BuilderNode(context);this.customNode.build(wrapBuilder<[Params]>(customNodeBuilder), new Params(this.message))return this.customNode.getFrameNode();}// 提供 update 方法供外部调用进行节点更新update(message: string) {if (this.customNode !== null) {this.customNode.update(new Params(message));}}
}

    1. 使用、显示自定义节点
@Component
export struct BuilderNodeExample {private textNodeController: CustomNodeController = new CustomNodeController('hello');private count = 0;build() {Row() {Column() {NodeContainer(this.textNodeController).width('100%').height(100).align(Alignment.Center)Button('Update').onClick(() => {// 点击按钮主动触发自定义节点的更新this.count += 1;this.textNodeController.update("Update " + this.count.toString());})}.width('100%').height('100%').justifyContent(FlexAlign.Center)}.height('100%').alignItems(VerticalAlign.Center)}
}

以上示例效果如下:

扩展:NodeController 内各方法回调时机

方法名称触发时机
makeNode当实例绑定的NodeContainer创建的时候进行回调。或者可以通过NodeController的rebuild()方法进行回调的触发
aboutToAppear当NodeController绑定的NodeContainer挂载显示时触发此回调
aboutToDisappear当NodeController绑定的NodeContainer卸载消失时触发此回调
aboutToResize当NodeController绑定的NodeContainer布局的时候触发此回调
onTouchEvent当NodeController绑定的NodeContainer收到Touch事件时触发此回调
rebuild调用此接口通知NodeContainer组件重新回调makeNode方法,更改子节点

附注(Example)

Demo示例(基于API11开发,支持NEXT及以上版本运行)已上传可供参考,包含如下内容:

  • 静态库+动态包+多模块设计
  • 状态管理
  • 统一路由管理(router+navPathStack)
  • 网络请求、Loading 等工具库封装
  • 自定义组件、自定义弹窗(解耦)
  • EventBus 事件通知
  • 扩展修饰器,实现 节流、防抖、权限申请
  • 动态路由 (navPathStack + 动态import + WrappedBuilder)
  • UI动态节点操作 (BuilderNode + NodeController)

最后

如果你想成为一名鸿蒙开发者,以下这些资料将是十分优质且有价值,让你的鸿蒙开发之路事半功倍!相对于网上那些碎片化的知识内容,这份学习资料的知识点更加系统化,更容易理解和记忆。

鸿蒙Next全套VIP学习资料←点击领取!(安全链接,放心点击

包含了:【OpenHarmony多媒体技术、Stage模型、ArkUI多端部署、分布式应用开发、音频、视频、WebGL、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战】等技术知识点。

1.鸿蒙(HarmonyOS NEXT)最新学习路线

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
————————————————

                      

2.大厂面试必问面试题

3.鸿蒙南向开发技术

 4.鸿蒙APP开发必备

 5.HarmonyOS Next 最新全套视频教程

 6.鸿蒙生态应用开发白皮书V2.0PDF

获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

xml与动态SQL

XML映射文件 规范 XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)。 ● XML映射文件的namespace属性为Mapper接口全限定名一致。 ● XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。 动态SQL &…

el-table表格变更前后根据数据值改变背景颜色

需求&#xff1a; 1.左侧变更前表格数据不可以编辑&#xff0c;并且背景色加灰 2.右侧变更后表格数据可被编辑&#xff0c;编辑后变更前与变更后行数据不一致&#xff0c;添加背景色区分 3.点击删除的时候&#xff0c;给变更后表格当前行&#xff0c;添加背景色和删除的中横…

在mybatis 中如何防止 IN里面的参数过多?

代码示例&#xff1a; select xsid from zhxg_gy_ssfp_cwfp where xsid in <foreach collection"list" item"item" open"(" close")" separator" " index"index"> <if test"(index % 999) 998&quo…

文章MSM_metagenomics(七):分组马赛克图

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 本教程是使用一个Python脚本来绘制马赛克图&#xff0c;用于可视化两个变量的频率分布。 数…

对 2024 年美赛选题的建议

对2024年美赛选题的建议包括&#xff1a; 1. 深入探讨当下全球面临的重大问题和挑战&#xff1a;鉴于美赛通常聚焦于全球性议题&#xff0c;如气候变化、可持续发展、数据分析等&#xff0c;参赛学生应关注这些议题&#xff0c;并深入研究相关数据与背景信息&#xff0c;以提出…

win10 修改远程桌面端口,win10 修改远程桌面端口详细步骤

在Windows 10中修改远程桌面端口是一个涉及系统配置和网络安全的任务&#xff0c;需要谨慎操作以确保系统的稳定性和安全性。 以下是详细的步骤内容&#xff0c;供您参考&#xff1a; 一、通过注册表编辑器修改远程桌面端口 1. 打开注册表编辑器&#xff1a; - 首先&#…

示例:WPF中DataGrid简单设置合并列头

一、目的&#xff1a;应用DataGridTemplateColumn列模板&#xff0c;去拆分列头和单元格布局的方式设置列头合并样式 二、实现 效果如下 三、环境 VS2022 四、示例 应用DataGridTemplateColumn自定义列头信息和单元格信息 <DataGrid AutoGenerateColumns"False"…

32、循环语句while+until

一、循环控制语句 双层循环和循环语句的使用&#xff0c;while和until的语法使用 1.1、echo 打印 continue&#xff1a;跳出当次&#xff0c;后续的条件成立&#xff0c;继续执行。 break&#xff1a;一旦break&#xff0c;后续的条件不再执行。 exit&#xff1a;满足条件…

App推广效果监测新篇章:Xinstall引领数据驱动的智能推广时代

在移动互联网时代&#xff0c;App的推广效果监测成为了广告主们关注的焦点。面对复杂多变的市场环境&#xff0c;如何确保广告投放的精准性和效果性&#xff0c;成为了摆在广告主面前的一大难题。Xinstall作为一款专业的App推广效果监测工具&#xff0c;凭借其强大的数据分析和…

PadleOcr SVTR训练环境搭建

1.环境搭建 1.1conda创建虚拟环境 confa create -n PaddleOcr --clone base 若出现 使用命令 source activate 然后再conda activate PaddleOcr 虚拟环境搭建完成。 1.2.若出现Config use_gpu cannot be set as true while your paddle is not compiled with cuda ! 需…

使用 MinIO Enterprise 对象存储目录搜索命名空间和元数据并为其建立索引

我们最大的客户&#xff08;那些拥有 EB 级数据和数千亿个对象的客户&#xff09;所面临的挑战之一是无法有效地搜索和查询命名空间&#xff0c;从而为组织创建可用的清单。对于管理员来说&#xff0c;无论是治理、审核、合规性还是相关任务&#xff0c;这都是一项关键功能。Mi…

充电学习—5、healthed 电池服务

1、healthed服务监听接收内核kernel的电池事件&#xff0c;然后上传数据给framware层的batterysevice&#xff0c;BatteryService计算电池的电量&#xff0c;显示&#xff0c;绘制动画等 android电池系统框架&#xff1a; 2、healthd服务入口&#xff1a;android/system/cor…

【已解决】better-scroll在PC端如何开启鼠标滚动以及如何始终显示滚动条

总结 需要安装插件 mouse-wheel 和 scrollbar 在PC端如何开启鼠标滚动? 需要安装官方提供的滚动插件&#xff1a;mouse-wheel https://better-scroll.github.io/docs/zh-CN/plugins/mouse-wheel.html 为了开启鼠标滚动功能&#xff0c;你需要首先引入 mouseWheel 插件&…

MFC工控项目实例之五CFile类读写系统参数

承接专栏《MFC工控项目实例之四在调试目录下创建指定文件夹》 实时保存输入的iPlotX坐标轴最小值、最大值到CFG.PAR文件&#xff0c;打开界面从CFG.PAR文件中实时读取保存的最小值、最大值在编辑框中显示。 1、SEAL_PRESSURE.h中添加代码 class CSEAL_PRESSUREApp : public CW…

作者推荐 | 探索分析从起源到现今的巅峰之旅(MySQL存储模型)

探索分析从起源到现今的巅峰之旅 背景介绍MySQL内部组织与结构MySQL的数据层次和关系InnoDB的数据存储模型数据记录的基本单元 — 行页目录&#xff08;Page Directory&#xff09;文件头&#xff08;File Header&#xff09;决定页面间的关联方式数据页头&#xff08;Page Hea…

eNSP学习——OSPF在帧中继网络中的配置

目录 主要命令 原理概述 实验目的 实验场景 实验拓扑 实验编址 实验步骤 1、基本配置 2、在帧中继上搭建OSPF网络 主要命令 //检查帧中继的虚电路状态 display fr pvc-info//检查帧中继的映射表 display fr map-info//手工指定OSPF邻居,采用单播方式发送报文 [R1]os…

推广结算统计,Xinstall助您轻松掌握每一分投入与回报!

在移动互联网时代&#xff0c;App的推广与运营离不开精准的数据支持和高效的结算系统。然而&#xff0c;面对众多的推广渠道和复杂的结算流程&#xff0c;如何确保每一分投入都能得到合理的回报&#xff0c;成为了众多企业和开发者关注的焦点。今天&#xff0c;我们就来聊聊如何…

Serverless如何赋能餐饮行业数字化?乐凯撒思变之道

导语 | 在数字化浪潮席卷全球的今天&#xff0c;每一个行业都在经历着前所未有的变革。餐饮行业作为人们日常生活中不可或缺的一部分&#xff0c;更是面临着巨大的转型压力。如何完成数字化转型&#xff0c;打破传统经营模式的限制&#xff0c;成为摆在众多餐饮商家面前的一道难…

盘点 Spring Boot 解决跨域请求的几种方法

熟悉 web 系统开发的同学&#xff0c;对下面这样的错误应该不会太陌生。 之所以会出现这个错误&#xff0c;是因为浏览器出于安全的考虑&#xff0c;采用同源策略的控制&#xff0c;防止当前站点恶意攻击 web 服务器盗取数据。 01、什么是跨域请求 同源策略&#xff0c;简单的…

【开源实验】模型窃取(KnockoffNet)

简介 使用KnockoffNet方法对预训练的Resnet50模型进行模型窃取攻击&#xff08;model stealing attack&#xff09; 实验设置 数据集&#xff08;dataset&#xff09;&#xff1a;CIFAR、MNIST 预训练模型&#xff08;pretrained model&#xff09;&#xff1a;Resnet50 受害…