0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS开发案例:【待办列表】

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-05-06 15:22 次阅读

介绍

使用ArkTS声明式语法和基础组件,实现简易待办列表。效果为点击某一事项,替换标签图片、虚化文字。效果如图所示:

相关概念

  • [ArkTS语法]:ArkTS是HarmonyOS的主要应用开发语言。ArkTS基于TypeScript(简称TS)语言扩展而来,是TS的超集。
  • [Text组件]:显示一段文本的组件。
  • [Column组件]:沿垂直方向布局的容器。
  • [Row组件]:沿水平方向布局的容器。

环境搭建

软件要求

  • [DevEco Studio]版本:DevEco Studio 3.1 Release。
  • OpenHarmony SDK版本:API version 9。

硬件要求

  • 开发板类型:[润和RK3568开发板]。
  • OpenHarmony系统:3.2 Release。

环境搭建

完成本篇Codelab我们首先要完成开发环境的搭建,本示例以RK3568开发板为例,参照以下步骤进行:

  1. [获取OpenHarmony系统版本]:标准系统解决方案(二进制)。以3.2 Release版本为例:
  2. 搭建烧录环境。
    1. [完成DevEco Device Tool的安装]
    2. [完成RK3568开发板的烧录]
  3. 搭建开发环境。
    1. 开始前请参考[工具准备],完成DevEco Studio的安装和开发环境配置。
    2. 开发环境配置完成后,请参考[使用工程向导]创建工程(模板选择“Empty Ability”)。
    3. 工程创建完成后,选择使用[真机进行调测]。
    4. 鸿蒙开发指导文档:[qr23.cn/FBD4cY]

代码结构解读

本篇Codelab只对核心代码进行讲解,对于完整代码,我们会在gitee中提供。

├──entry/src/main/ets                   // ArkTS代码区
│  ├──common
│  │  └──constants
│  │     └──CommonConstants.ets         // 公共常量类
│  ├──entryability
│  │  └──EntryAbility.ts                // 程序入口类
│  ├──pages
│  │  └──ToDoListPage.ets               // 主页面
│  ├──view
│  │  └──ToDoItem.ets                   // 自定义单项待办组件
│  └──viewmodel
│     └──DataModel.ets                  // 列表数据获取文件
└──entry/src/main/resources             // 资源文件目录

`HarmonyOSOpenHarmony鸿蒙文档籽料:mau123789v直接拿`

搜狗高速浏览器截图20240326151547.png

构建主界面

本章节将介绍应用主页面的实现,采用Column容器嵌套ForEach完成页面整体布局,页面分为两个部分:

  • 标题区:使用Text组件显示“待办”标题。
  • 数据列表:使用ForEach循环渲染自定义组件ToDoItem。

效果如图所示:

在工程pages目录中,选中Index.ets,点击鼠标右键 > Refactor > Rename,改名为ToDoListPage.ets。改名后,在工程entryability目录下,把EntryAbility.ts文件中windowStage.loadContent方法的第一个参数修改为pages/ToDoListPage。

// EntryAbility.ts
onWindowStageCreate(windowStage: Window.WindowStage) {
  ...
  windowStage.loadContent('pages/ToDoListPage', (err, data) = > {
    ...
  });
}

选中工程的ets目录,点击鼠标右键 > new > Directory,新建view文件夹。选中新建的view文件夹,点击鼠标右键 > new > ArkTS File,新建ToDoItem.ets文件。后续在此文件中封装自定义组件。在ToDoListPage.ets中导入封装的自定义组件ToDoItem,在aboutToAppear生命周期中初始化待办数据totalTasks,在build方法中编写主页面布局,使用Text文本组件显示标题,使用ForEach循环渲染自定义组件ToDoItem。

// ToDoListPage.ets
import ToDoItem'../view/ToDoItem';
...
@Entry
@Component
struct ToDoListPage {
  private totalTasks: Array< string > = [];

  aboutToAppear() {
    this.totalTasks = DataModel.getData();
  }

  build() {
    Column({ space: CommonConstants.COLUMN_SPACE }) {
      Text($r('app.string.page_title'))
        ...
      ForEach(this.totalTasks, (item: string) = > {
        ToDoItem({ content: item })
      }, (item: string) = > JSON.stringify(item))
    }
    ...
  }
}

自定义子组件

在ToDoItem.ets文件中,显示的文本内容为入参content,使用@State修饰参数isComplete来管理当前事项的完成状态。当点击当前ToDoItem时,触发Row组件的onClick事件,更新isComplete的值,isComplete的改变将会刷新使用该状态变量的UI组件。具体表现为:当前点击的ToDoItem中,labelIcon图片的替换、文本透明度opacity属性的变化、文本装饰线decoration的显隐。

// ToDoItem.ets
...
@Component
export default struct ToDoItem {
  private content: string = '';
  @State isComplete: boolean = false;
  
 @Builder labelIcon(icon: Resource) {
    Image(icon)
      ...
  }

  build() {
    Row() {
      if (this.isComplete) {
        this.labelIcon($r('app.media.ic_ok'));
      } else {
        this.labelIcon($r('app.media.ic_default'));
      }
      Text(this.content)
        ...
        .opacity(this.isComplete ? CommonConstants.OPACITY_COMPLETED : CommonConstants.OPACITY_DEFAULT)
        .decoration({ type: this.isComplete ? TextDecorationType.LineThrough : TextDecorationType.None })
    }
    ...
    .onClick(() = > {
      this.isComplete = !this.isComplete;
    })
  }
}

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    25

    文章

    4883

    浏览量

    97010
  • 鸿蒙
    +关注

    关注

    57

    文章

    2301

    浏览量

    42670
  • HarmonyOS
    +关注

    关注

    79

    文章

    1965

    浏览量

    29953
  • OpenHarmony
    +关注

    关注

    25

    文章

    3629

    浏览量

    16031
收藏 人收藏

    评论

    相关推荐

    TL3588-NPU开发案

    TL3588-NPU开发案
    的头像 发表于 01-24 15:22 551次阅读
    TL3588-NPU<b class='flag-5'>开发案</b>例

    TL3588-视频开发案

    TL3588-视频开发案
    的头像 发表于 01-24 16:29 628次阅读
    TL3588-视频<b class='flag-5'>开发案</b>例

    TLT507-Linux-RT应用开发案

    TLT507-Linux-RT应用开发案
    的头像 发表于 01-26 09:46 634次阅读
    TLT507-Linux-RT应用<b class='flag-5'>开发案</b>例

    TLT507-视频开发案

    TLT507-视频开发案
    的头像 发表于 01-26 10:50 949次阅读
    TLT507-视频<b class='flag-5'>开发案</b>例

    3568F-视频开发案

    3568F-视频开发案
    的头像 发表于 04-12 13:51 822次阅读
    3568F-视频<b class='flag-5'>开发案</b>例

    HarmonyOS开发案例:【首选项】

    基于HarmonyOS的首选项能力实现的一个简单示例。
    的头像 发表于 04-19 16:20 1175次阅读
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>开发案</b>例:【首选项】

    HarmonyOS应用开发-UI设计开发与预览

    `. 介绍通过智能表待办应用开发,让开发者了解智能表HarmonyOS应用开发的全流程,实现从工程创建到界面预览全过程。使用HUAWEIDe
    发表于 09-23 17:51

    HarmonyOS IoT 硬件开发案例分享

    ``许思维老师HiSpark Wi-Fi IoT 开发案例分享:案例一:AHT20温湿度传感器开发、调试;案例二:oled屏驱动库移植,调试;案例三:用OLED屏播放视频,Wi-Fi 和 TCP/IP 综合应用。 ``
    发表于 10-27 17:30

    【润和直播课预告@华为开发者学院】HarmonyOS设备开发基础课程|HiSpark WiFi-IoT 智能小车套件开发案

    `【润和直播课预告@华为开发者学院】HarmonyOS设备开发基础课程|HiSparkWiFi-IoT 智能小车套件开发案例,3月18日(周四) 19:00-21:00,让你的
    发表于 03-16 15:01

    许思维老师HarmonyOS IoT硬件开发案例分享

    许思维老师HiSpark Wi-Fi IoT 开发案例分享:案例一:AHT20温湿度传感器开发、调试;案例二:oled屏驱动库移植,调试;案例三:用OLED屏播放视频,Wi-Fi 和 TCP/IP 综合应用。
    发表于 10-29 10:39 39次下载
    许思维老师<b class='flag-5'>HarmonyOS</b> IoT硬件<b class='flag-5'>开发案</b>例分享

    华为开发者分论坛HarmonyOS学生公开课-OpenHarmony Codelabs开发案

    2021华为开发者分论坛HarmonyOS学生公开课-OpenHarmony Codelabs开发案
    的头像 发表于 10-24 11:25 1869次阅读
    华为<b class='flag-5'>开发</b>者分论坛<b class='flag-5'>HarmonyOS</b>学生公开课-OpenHarmony Codelabs<b class='flag-5'>开发案</b>例

    构建低功耗数字化的Wi-Fi待办事项列表

    电子发烧友网站提供《构建低功耗数字化的Wi-Fi待办事项列表.zip》资料免费下载
    发表于 12-23 16:03 0次下载
    构建低功耗数字化的Wi-Fi<b class='flag-5'>待办</b>事项<b class='flag-5'>列表</b>

    OpenHarmony上实现待办事项功能

    列表的编辑模式用途十分广泛,常见于待办事项管理、文件管理、备忘录的记录管理等应用场景。
    的头像 发表于 06-25 15:19 662次阅读

    RK3568-视频开发案

    RK3568-视频开发案
    的头像 发表于 01-18 15:51 769次阅读
    RK3568-视频<b class='flag-5'>开发案</b>例

    RK3568---NPU开发案

    RK3568---NPU开发案
    的头像 发表于 01-19 13:50 803次阅读
    RK3568---NPU<b class='flag-5'>开发案</b>例