news 2026/6/5 15:06:40

HarmonyOS6 ArkTS ListItem通过ComponentContent设置划出组件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS6 ArkTS ListItem通过ComponentContent设置划出组件

文章目录

    • 一、功能说明
    • 二、完整标准代码
    • 三、核心API:ComponentContent 基础说明
      • 核心结构
    • 四、关键用法逐行解析
      • 1. 定义参数类(传递数据)
      • 2. 创建可复用Builder(侧滑布局)
      • 3. 初始化ComponentContent(生命周期)
      • 4. 动态更新参数(高级能力)
      • 5. ListItem绑定划出组件(builderComponent)
      • 6. 封装自定义ListItem组件
    • 五、运行效果
    • 总结

一、功能说明

ComponentContent是 HarmonyOS 提供的高级UI内容封装容器,用于在swipeAction中替代普通builder,实现:

  • 向侧滑划出组件动态传递参数
  • 侧滑布局高度复用、统一管理
  • 运行时动态更新侧滑按钮文字/样式
  • 父子组件、列表控制器(ListScroller)无缝传递

二、完整标准代码

// xxx.ets import { ComponentContent } from '@kit.ArkUI'; class BuilderParams { text: string | Resource; scroller: ListScroller; constructor(text: string | Resource, scroller: ListScroller) { this.text = text; this.scroller = scroller; } } @Builder function itemBuilder(params: BuilderParams) { Row() { Button(params.text).margin('4vp') Button('Set').margin('4vp').onClick(() => { params.scroller.closeAllSwipeActions() }) }.padding('4vp').justifyContent(FlexAlign.SpaceEvenly) } @Component struct MyListItem { scroller: ListScroller = new ListScroller(); @State arr: number[] = [0, 1, 2, 3, 4]; @State project ?: number = 0; startBuilder ?: ComponentContent<BuilderParams> = undefined; endBuilder ?: ComponentContent<BuilderParams> = undefined; builderParam = new BuilderParams('delete', this.scroller); aboutToAppear(): void { this.startBuilder = new ComponentContent(this.getUIContext(), wrapBuilder(itemBuilder), this.builderParam); this.endBuilder = new ComponentContent(this.getUIContext(), wrapBuilder(itemBuilder), this.builderParam); } GetStartBuilder() { this.startBuilder?.update(new BuilderParams('StartDelete', this.scroller)); return this.startBuilder; } GetEndBuilder() { this.endBuilder?.update(new BuilderParams('EndDelete', this.scroller)); return this.endBuilder; } build() { ListItem() { Text('item' + this.project) .width('100%') .height(100) .fontSize(16) .textAlign(TextAlign.Center) .borderRadius(10) .backgroundColor(0xFFFFFF) } .transition(TransitionEffect.OPACITY) .swipeAction({ end: { builderComponent: this.GetEndBuilder(), onAction: () => { this.getUIContext()?.animateTo({ duration: 1000 }, () => { let index = this.arr.indexOf(this.project); this.arr.splice(index, 1); }); }, actionAreaDistance: 56 }, start: { builderComponent: this.GetStartBuilder(), onAction: () => { this.getUIContext()?.animateTo({ duration: 1000 }, () => { let index = this.arr.indexOf(this.project); this.arr.splice(index, 1); }); }, actionAreaDistance: 56 } }) .padding(5) } } @Entry @Component struct ListItemExample { @State arr: number[] = [0, 1, 2, 3, 4]; private scroller: ListScroller = new ListScroller(); build() { Column() { List({ space: 10, scroller: this.scroller }) { ListItemGroup() { ForEach(this.arr, (project: number) => { MyListItem({ scroller: this.scroller, project: project, arr: this.arr }) }, (item: string) => item) } } } .padding(10) .backgroundColor(0xDCDCDC) .width('100%') .height('100%') } }

运行效果如图:

当向左边滑动:

当向右边滑动:


三、核心API:ComponentContent 基础说明

ComponentContent是官方推荐的UI内容动态封装工具,专门用于:

  • 封装@Builder函数
  • 向Builder传递自定义参数
  • 运行时更新参数并刷新UI
  • swipeAction中作为builderComponent使用

核心结构

newComponentContent(uiContext:UIContext,// 上下文builder:WrappedBuilder<Params>,// 被wrap的Builderparams:Params// 自定义参数)

四、关键用法逐行解析

1. 定义参数类(传递数据)

创建BuilderParams统一管理侧滑组件需要的按钮文字滚动控制器

class BuilderParams { text: string | Resource; // 按钮显示文本 scroller: ListScroller; // 列表滑动控制器 constructor(text: string | Resource, scroller: ListScroller) { this.text = text; this.scroller = scroller; } }

2. 创建可复用Builder(侧滑布局)

使用@Builder定义通用侧滑按钮布局,接收外部参数

@Builder function itemBuilder(params: BuilderParams) { Row() { Button(params.text) // 动态按钮文字 Button('Set').onClick(() => { params.scroller.closeAllSwipeActions() // 关闭滑动 }) }.justifyContent(FlexAlign.SpaceEvenly) }

3. 初始化ComponentContent(生命周期)

aboutToAppear中创建ComponentContent实例,绑定Builder和参数:

aboutToAppear(): void { this.startBuilder = new ComponentContent( this.getUIContext(), wrapBuilder(itemBuilder), // 包装Builder this.builderParam // 传入参数 ); }

4. 动态更新参数(高级能力)

通过update()方法运行时修改侧滑按钮显示内容

GetStartBuilder() { this.startBuilder?.update( new BuilderParams('StartDelete', this.scroller) ); return this.startBuilder; }

5. ListItem绑定划出组件(builderComponent)

swipeAction中使用builderComponent绑定ComponentContent

.swipeAction({ end: { builderComponent: this.GetEndBuilder(), // 绑定ComponentContent onAction: () => { /* 删除逻辑 */ }, actionAreaDistance: 56 }, start: { builderComponent: this.GetStartBuilder(), } })

6. 封装自定义ListItem组件

将完整ListItem+侧滑逻辑封装为MyListItem,支持外部传入数据:

MyListItem({ scroller: this.scroller, project: project, arr: this.arr })

五、运行效果

  1. 列表展示5个白色圆角列表项
  2. 左滑:显示 StartDelete + Set 按钮
  3. 右滑:显示 EndDelete + Set 按钮
  4. 点击Set:关闭所有展开的滑动项
  5. 滑动超过阈值:触发平滑删除动画
  6. 所有列表项共用一套侧滑布局,实现高度复用

总结

ComponentContent是 HarmonyOS 6 为ListItem侧滑划出组件提供的高级官方方案,核心价值:

  1. 解决传统builder无法传递参数的问题
  2. 实现侧滑布局复用化、模块化、统一管理
  3. 支持运行时动态更新侧滑按钮内容
  4. 可传递复杂对象(控制器、自定义数据)
  5. 是企业级项目中列表交互的标准实践

如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是持续创作的动力!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 15:05:46

旋转编码开关硬件原理与软件解码实战指南

1. 旋转编码开关&#xff1a;从硬件原理到软件实现的深度解析在嵌入式开发中&#xff0c;我们经常需要一种直观、可靠的人机交互方式&#xff0c;用来调节参数、切换菜单或者进行精确的数值设定。传统的按键虽然简单&#xff0c;但在需要连续、快速调整的场景下就显得力不从心。…

作者头像 李华
网站建设 2026/6/5 15:04:22

5分钟快速上手:FF14国际服汉化补丁终极指南

5分钟快速上手&#xff1a;FF14国际服汉化补丁终极指南 【免费下载链接】FFXIVChnTextPatch 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIVChnTextPatch 还在为《最终幻想XIV》国际服的英文界面而烦恼吗&#xff1f;FFXIVChnTextPatch中文补丁工具是你的完美解决…

作者头像 李华
网站建设 2026/6/5 15:03:37

从Moment.js到Day.js:前端时间库的平滑迁移实战与避坑指南

从Moment.js到Day.js&#xff1a;前端时间库的平滑迁移实战与避坑指南在当今快节奏的前端开发领域&#xff0c;性能优化和包体积控制已成为每个项目必须面对的挑战。时间处理作为前端开发中最基础却又最频繁使用的功能之一&#xff0c;其实现方式的选择直接影响着应用的性能和用…

作者头像 李华
网站建设 2026/6/5 15:03:27

抖音无水印视频下载完全指南:从零开始掌握批量下载技术

抖音无水印视频下载完全指南&#xff1a;从零开始掌握批量下载技术 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…

作者头像 李华
网站建设 2026/6/5 15:00:29

DDR仿真

1.1 概述本文主要完成DDR PCB后仿真&#xff0c;主要完成layout文件的导入&#xff0c;DDR SI设置&#xff0c;DDR SI参数的提取再到si参数导出到原理图进行仿真。1.2 DDR layout文件导入1、使用import 将cadence brd导入到ads中&#xff0c;界面如下2、启动SI PRO仿真&#xf…

作者头像 李华
网站建设 2026/6/5 14:58:04

【第 001 讲】计算机底层基础与 Python 生态全景:硬件架构 | 语言演进 | 执行机制 | 语言特性 | 解释器 | 版本策略

1 计算机系统架构基础 1.1 计算机系统宏观概述 计算机&#xff08;Computer&#xff09;是一种能够按照预设程序指令自动、高速处理海量数据的电子设备。从宏观工程视角来看&#xff0c;一个完整的现代计算机系统由物理层面的硬件系统&#xff08;Hardware System&#xff09;…

作者头像 李华