0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmony上實(shí)現(xiàn)待辦事項(xiàng)功能

OpenHarmony技術(shù)社區(qū) ? 來源:OST開源開發(fā)者 ? 2023-06-25 15:19 ? 次閱讀

列表的編輯模式用途十分廣泛,常見于待辦事項(xiàng)管理、文件管理、備忘錄的記錄管理等應(yīng)用場景。

在列表的編輯模式下,新增和刪除列表項(xiàng)是最基礎(chǔ)的功能,其核心是對列表項(xiàng)對應(yīng)的數(shù)據(jù)集合進(jìn)行數(shù)據(jù)添加和刪除。

下面以待辦事項(xiàng)管理為例,介紹如何快速實(shí)現(xiàn)新增和刪除列表項(xiàng)功能。

環(huán)境要求

本例基于以下環(huán)境開發(fā),開發(fā)者也可以基于其他適配的版本進(jìn)行開發(fā):

IDE:DevEco Studio 3.1 Release

SDK:Ohos_sdk_public 3.2.12.5(API Version 9 Release)

新增列表項(xiàng)


當(dāng)用戶點(diǎn)擊添加按鈕時(shí),將彈出列表項(xiàng)選擇界面,用戶點(diǎn)擊確定后,列表中新增對應(yīng)項(xiàng)目。


新增待辦

開發(fā)步驟

定義列表項(xiàng)數(shù)據(jù)結(jié)構(gòu)和初始化列表數(shù)據(jù),構(gòu)建列表整體布局和列表項(xiàng)。

以待辦事項(xiàng)管理為例,首先定義待辦事項(xiàng)的數(shù)據(jù)結(jié)構(gòu):

importutilfrom'@ohos.util';

exportclassToDo{
key:string=util.generateRandomUUID(true);
name:string;

constructor(name:string){
this.name=name;
}
}
然后,初始化待辦事項(xiàng)列表和可選事項(xiàng)列表:
@StatetoDoData:ToDo[]=[];
privateavailableThings:string[]=['讀書','運(yùn)動(dòng)','旅游','聽音樂','看電影','唱歌'];
構(gòu)建 UI 界面,初始界面包含“待辦”和新增按鈕“+”:
Text('待辦')
.fontSize(36)
.margin({left:40})
Blank()
Text('+')
.fontWeight(FontWeight.Lighter)
.fontSize(40)
.margin({right:30})
構(gòu)建列表布局并通過 ForEach 循環(huán)渲染列表項(xiàng):
List({space:10}){
ForEach(this.toDoData,(toDoItem)=>{
ListItem(){
...
}
},toDoItem=>toDoItem.key)
}
為新增按鈕綁定點(diǎn)擊事件,并在事件中通過 TextPickerDialog.show 添加新增列表項(xiàng)的邏輯:
Text('+')
.onClick(()=>{
TextPickerDialog.show({
range:this.availableThings,//將可選事項(xiàng)列表配置到選擇對話框中
onAccept:(value:TextPickerResult)=>{
this.toDoData.push(newToDo(this.availableThings[value.index]));//用戶點(diǎn)擊確認(rèn),將選擇的數(shù)據(jù)添加到待辦列表toDoData中
},
})
})

刪除列表項(xiàng)

當(dāng)用戶長按列表項(xiàng)進(jìn)入刪除模式時(shí),提供用戶刪除列表項(xiàng)選擇的交互界面,用戶勾選完成后點(diǎn)擊刪除按鈕,列表中刪除對應(yīng)的項(xiàng)目。

長按刪除待辦事項(xiàng)

開發(fā)步驟

列表的刪除功能一般進(jìn)入編輯模式后才可使用,所以需要提供編輯模式的入口。

以待辦列表為例,通過 LongPressGesture() 監(jiān)聽列表項(xiàng)的長按事件,當(dāng)用戶長按列表項(xiàng)時(shí),進(jìn)入編輯模式。

//ToDoListItem.ets

Flex({justifyContent:FlexAlign.SpaceBetween,alignItems:ItemAlign.Center}){
...
}
.gesture(
GestureGroup(GestureMode.Exclusive,
LongPressGesture()//監(jiān)聽長按事件
.onAction(()=>{
if(!this.isEditMode){
this.isEditMode=true;//進(jìn)入編輯模式
this.selectedItems.push(this.toDoItem);//記錄長按時(shí)選中的列表項(xiàng)
}
})
)
)

需要響應(yīng)用戶的選擇交互,記錄要?jiǎng)h除的列表項(xiàng)數(shù)據(jù)。

在待辦列表中,通過勾選框的勾選或取消勾選,響應(yīng)用戶勾選列表項(xiàng)變化,記錄所有選擇的列表項(xiàng)。

//ToDoListItem.ets

if(this.isEditMode){
Checkbox()
.onChange((isSelected)=>{
if(isSelected){
this.selectedItems.push(this.toDoItem)//勾選時(shí),記錄選中的列表項(xiàng)
}else{
letindex=this.selectedItems.indexOf(this.toDoItem)
if(index!==-1){
this.selectedItems.splice(index,1)//取消勾選時(shí),則將此項(xiàng)從selectedItems中刪除
}
}
})
...
}
需要響應(yīng)用戶點(diǎn)擊刪除按鈕事件,刪除列表中對應(yīng)的選項(xiàng)。
//ToDoList.ets

Button('刪除')
.onClick(()=>{
//刪除選中的列表項(xiàng)對應(yīng)的toDoData數(shù)據(jù)
letleftData=this.toDoData.filter((item)=>{
returnthis.selectedItems.find((selectedItem)=>selectedItem!==item);
})

this.toDoData=leftData;
this.isEditMode=false;
})
...

完整示例代碼

新增和刪除列表項(xiàng)的實(shí)現(xiàn)共涉及三個(gè)文件,各文件完整代碼如下:

待辦事項(xiàng)數(shù)據(jù)結(jié)構(gòu)代碼(ToDo.ets):

//ToDo.ets
importutilfrom'@ohos.util';

exportclassToDo{
key:string=util.generateRandomUUID(true)
name:string;

constructor(name:string){
this.name=name;
}
}
待辦事項(xiàng)列表代碼(ToDoList.ets):
//ToDoList.ets
import{ToDo}from'../model/ToDo';
import{ToDoListItem}from'./ToDoListItem';

@Entry
@Component
structToDoList{
@StatetoDoData:ToDo[]=[]
@Watch('onEditModeChange')@StateisEditMode:boolean=false
@StateselectedItems:ToDo[]=[]

privateavailableThings:string[]=["讀書","運(yùn)動(dòng)","旅游",'聽音樂','看電影','唱歌']

saveData(value:string){
this.toDoData.push(newToDo(value))
}

onEditModeChange(){
if(!this.isEditMode){
this.selectedItems=[]
}
}

build(){
Column(){
Row(){
if(this.isEditMode){
Text('X')
.fontSize(20)
.onClick(()=>{
this.isEditMode=false;
})
.margin({left:20,right:20})

Text('已選擇'+this.selectedItems.length+'項(xiàng)')
.fontSize(24)
}else{
Text('待辦')
.fontSize(36)
.margin({left:40})
Blank()
Text('+')
.fontWeight(FontWeight.Lighter)
.fontSize(40)
.margin({right:30})
.onClick(()=>{
TextPickerDialog.show({
range:this.availableThings,
onAccept:(value:TextPickerResult)=>{
this.toDoData.push(newToDo(this.availableThings[value.index]))
console.info('tododata:'+JSON.stringify(this.toDoData))
},
})
})
}
}
.height('12%')
.width('100%')

List({initialIndex:0,space:10}){
ForEach(this.toDoData,toDoItem=>{
ListItem(){
ToDoListItem({
isEditMode:$isEditMode,
toDoItem:toDoItem,
selectedItems:$selectedItems
})
}.padding({left:24,right:24,bottom:12})
},toDoItem=>toDoItem.key)
}
.height('73%')
.listDirection(Axis.Vertical)
.edgeEffect(EdgeEffect.Spring)

if(this.isEditMode){
Row(){
Button('刪除')
.width('80%')
.onClick(()=>{
letleftData=this.toDoData.filter((item)=>{
returnthis.selectedItems.find((selectedItem)=>selectedItem!=item)
})
console.log('leftData:'+leftData);
this.isEditMode=false;
this.toDoData=leftData;
})
.backgroundColor('#ffd75d5d')
}
.height('15%')
}
}
.backgroundColor('#fff1f3f5')
.width('100%')
.height('100%')
}
}
待辦事項(xiàng)代碼(ToDoListItem.ets):

//ToDoListItem.ets
import{ToDo}from'../model/ToDo';

@Component
exportstructToDoListItem{
@LinkisEditMode:boolean
@LinkselectedItems:ToDo[]
privatetoDoItem:ToDo;

hasBeenSelected():boolean{
returnthis.selectedItems.indexOf(this.toDoItem)!=-1
}

build(){
Flex({justifyContent:FlexAlign.SpaceBetween,alignItems:ItemAlign.Center}){
Row({space:4}){
Circle()
.width(24)
.height(24)
.fill(Color.White)
.borderWidth(3)
.borderRadius(30)
.borderColor('#ffdcdfdf')
.margin({right:10})

Text(`${this.toDoItem.name}`)
.maxLines(1)
.fontSize(24)
.textOverflow({overflow:TextOverflow.Ellipsis})
}
.padding({left:12})

if(this.isEditMode){
Checkbox()
.select(this.hasBeenSelected()?true:false)
.onChange((isSelected)=>{
if(isSelected){
this.selectedItems.push(this.toDoItem)
}else{
letindex=this.selectedItems.indexOf(this.toDoItem)
if(index!=-1){
this.selectedItems.splice(index,1)
}
}
})
.width(24)
.height(24)
}
}
.width('100%')
.height(80)
.padding({
left:16,
right:12,
top:4,
bottom:4
})
.borderRadius(24)
.linearGradient({
direction:GradientDirection.Right,
colors:this.hasBeenSelected()?[[0xffcdae,0.0],[0xFfece2,1.0]]:[[0xffffff,0.0],[0xffffff,1.0]]
})
.gesture(
GestureGroup(GestureMode.Exclusive,
LongPressGesture()
.onAction(()=>{
if(!this.isEditMode){
this.isEditMode=true
this.selectedItems.push(this.toDoItem)
}
})
)
)
}
}

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • IDE
    IDE
    +關(guān)注

    關(guān)注

    0

    文章

    334

    瀏覽量

    46581
  • 文件管理
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    8885
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1015

    瀏覽量

    45597
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3607

    瀏覽量

    15956

原文標(biāo)題:OpenHarmony上實(shí)現(xiàn)“待辦事項(xiàng)”功能

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OpenHarmony開發(fā)實(shí)例:【 待辦事項(xiàng)TodoList】

    TodoList應(yīng)用是基于OpenHarmony SDK開發(fā)的安裝在潤和HiSpark Taurus AI Camera(Hi3516d)開發(fā)板標(biāo)準(zhǔn)系統(tǒng)的應(yīng)用;應(yīng)用主要功能是以列表的形式,展示需要完成的日程;通過本demo可以
    的頭像 發(fā)表于 04-22 22:00 ?615次閱讀
    <b class='flag-5'>OpenHarmony</b>開發(fā)實(shí)例:【 <b class='flag-5'>待辦事項(xiàng)</b>TodoList】

    HarmonyOS開發(fā)案例:【待辦列表】

    使用ArkTS聲明式語法和基礎(chǔ)組件,實(shí)現(xiàn)簡易待辦列表。效果為點(diǎn)擊某一事項(xiàng),替換標(biāo)簽圖片、虛化文字。
    的頭像 發(fā)表于 05-06 15:22 ?930次閱讀
    HarmonyOS開發(fā)案例:【<b class='flag-5'>待辦</b>列表】

    5分鐘代碼挑戰(zhàn)Flutter實(shí)現(xiàn)待辦事項(xiàng)App

    代碼系統(tǒng)架構(gòu)flutter
    小凡
    發(fā)布于 :2022年09月07日 21:51:53

    5分鐘代碼挑戰(zhàn)Flutter實(shí)現(xiàn)待辦事項(xiàng)App

    代碼系統(tǒng)架構(gòu)flutter
    小凡
    發(fā)布于 :2022年09月09日 06:04:22

    實(shí)用待辦事項(xiàng)APP大推薦---《Count2task 記事達(dá)人》

    更容易判別事情的優(yōu)先級(jí)以及到期的壓力。#1設(shè)計(jì)者認(rèn)為與其告知使用者甚么日期該做甚么事情,不如讓使用者直接知道他剩下多少時(shí)間,這樣更能拿捏事前能準(zhǔn)備的時(shí)間。通常我們記錄待辦事項(xiàng), 看到日期與時(shí)間依然
    發(fā)表于 07-09 15:19

    我應(yīng)該知道什么才能在fpga領(lǐng)域工作?

    我應(yīng)該知道什么才能在fpga領(lǐng)域工作?我想得到一份我應(yīng)該知道和練習(xí)的“待辦事項(xiàng)”清單謝謝以上來自于谷歌翻譯以下為原文what should i know best for working
    發(fā)表于 01-11 10:30

    HarmonyOS應(yīng)用開發(fā)-UI設(shè)計(jì)開發(fā)與預(yù)覽

    (harmony-todo)提示:開發(fā)過程完成每一步點(diǎn)擊保存之后即可在預(yù)覽界面實(shí)時(shí)預(yù)覽效果3.為index頁面(index.hml)添加布局信息3.1添加今日待辦事項(xiàng)的列表<
    發(fā)表于 09-23 17:51

    app圖標(biāo)動(dòng)效在openharmony的源碼哪里實(shí)現(xiàn)的?

    openharmony點(diǎn)擊一個(gè)app圖標(biāo)的之后,應(yīng)用會(huì)從左上角一點(diǎn)點(diǎn)放大直至鋪滿屏幕;我想問一下這個(gè)動(dòng)效是在openharmony的源碼的哪里實(shí)現(xiàn)的?
    發(fā)表于 06-10 11:01

    卡片分揀機(jī)的制作

     我非常喜歡卡片分揀機(jī)的外觀和尺寸。我對這個(gè)功能也非常滿意,但正如我已經(jīng)說過的那樣有一些開放的待辦事項(xiàng)
    的頭像 發(fā)表于 08-26 09:54 ?3717次閱讀
    卡片分揀機(jī)的制作

    OpenHarmony生態(tài)論壇:UROVO在OpenHarmony的規(guī)劃和實(shí)踐

    OpenHarmony生態(tài)論壇:UROVO在OpenHarmony的規(guī)劃和實(shí)踐
    的頭像 發(fā)表于 04-25 17:33 ?1311次閱讀
    <b class='flag-5'>OpenHarmony</b>生態(tài)論壇:UROVO在<b class='flag-5'>OpenHarmony</b><b class='flag-5'>上</b>的規(guī)劃和實(shí)踐

    如何在OpenHarmony開源代碼基礎(chǔ)實(shí)現(xiàn)數(shù)字管家開發(fā)宿舍全屋智能

    基于OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)、數(shù)字管家開發(fā)宿舍全屋智能,實(shí)現(xiàn)碰一碰開門、碰一碰開燈、碰一碰開風(fēng)扇以及煙感檢測。因?yàn)楦黜?xiàng)目開發(fā)流程大體相似,本文主要以碰一碰開門為例介紹如何在現(xiàn)
    的頭像 發(fā)表于 08-26 09:55 ?1711次閱讀

    構(gòu)建低功耗數(shù)字化的Wi-Fi待辦事項(xiàng)列表

    電子發(fā)燒友網(wǎng)站提供《構(gòu)建低功耗數(shù)字化的Wi-Fi待辦事項(xiàng)列表.zip》資料免費(fèi)下載
    發(fā)表于 12-23 16:03 ?0次下載
    構(gòu)建低功耗數(shù)字化的Wi-Fi<b class='flag-5'>待辦事項(xiàng)</b>列表

    何為自主智能體?

    想象一下,你創(chuàng)造了一個(gè)人工智能工具,可以為其設(shè)定目標(biāo),即使是像「創(chuàng)造世界最好的冰淇淋」這樣模糊的目標(biāo),它也會(huì)擬出一個(gè)待辦事項(xiàng)列表,執(zhí)行待辦事項(xiàng),并根據(jù)進(jìn)展來添加新的待辦事項(xiàng)。隨后它會(huì)
    的頭像 發(fā)表于 04-28 15:50 ?1123次閱讀
    何為自主智能體?

    10分鐘快速掌握OpenHarmony社區(qū)貢獻(xiàn)新流程

    (以下簡稱OpenHarmony)社區(qū)優(yōu)化了Issue和PR處理流程,新支持了一系列交互命令和狀態(tài)標(biāo)簽,用于明確處理階段和當(dāng)前處理責(zé)任人。社區(qū)CI Bot工具還提供了待辦事項(xiàng)提醒能力,并能自動(dòng)處理超期
    的頭像 發(fā)表于 06-20 21:10 ?610次閱讀

    科大訊飛會(huì)議耳機(jī)Pro 2: 具備AI會(huì)議助理與32國語言同傳翻譯功能

    據(jù)了解,該款產(chǎn)品搭載VIAIM AI進(jìn)化大模型,能夠智能識(shí)別提取關(guān)鍵播報(bào)信息,省去繁瑣整理工作;并具備一鍵生成會(huì)議摘要和待辦事項(xiàng)功能。用戶只需講出問題或通過文字輸入,即可搜尋所需追溯信息。
    的頭像 發(fā)表于 05-06 11:10 ?699次閱讀