HarmonyOS5新闻阅读类行业实践-频道选择(二)
HarmonyOS5【点我加入我的战队!领鸿蒙限定礼盒】
场景介绍
频道选择是新闻阅读类应用中的典型场景之一,如用户可以编辑订阅频道。
本示例使用Grid组件实现添加、删除频道以及对频道进行拖动排序等功能。
效果预览
实现思路
- 通过bindSheet方法给组件绑定半模态页面,点击图标后唤起频道选择页面。
- TabsWithBarIcon({ tabArray: this.mySubscriptionList, canShowEditSheet: this.canShowSheet })
- // 绑定半模态页面
- .bindSheet($$this.canShowSheet, this.channelEditSheetBuilder(), {});
- Image($r(\'sys.media.ohos_ic_public_add\'))
- .onClick(() => {
- this.showEditSheet = true; // 打开半模态页面
- });
- 通过设置editMode属性进入Grid组件编辑模式,并设置supportAnimation属性开启GridItem拖拽动画。
- 在onItemDragStart事件中,设置拖拽过程中显示的组件样式。
- 在onItemDrop事件中,获取拖拽起始位置itemIndex和插入位置insertIndex,并实现移动元素位置的逻辑。
- Grid() {
- // ...网格元素
- }
- .editMode(this.isEditMode)
- .supportAnimation(true) // 开启拖拽动画
- .onItemDragStart((event: ItemDragInfo, itemIndex: number) => {
- // 跟随手指拖动时所渲染的网格内容
- return this.gridDragBuilder(this.mySubscriptionList[itemIndex].name);
- })
- .onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => {
- if (isSuccess) {
- // 成功释放后,移动元素位置
- moveElement(this.mySubscriptionList, itemIndex, insertIndex);
- }
- });
约束与限制
- 本示例支持API Version 17 Release及以上版本。
- 本示例支持Harmony 5.0.5 Release SDK及以上版本。
- 本示例需要使用DevEco Studio 5.0.5 Release及以上版本进行编译运行。
工程目录
- ├──entry/src/main/ets // 代码区
- │ ├──common
- │ │ └──CommonConstants.ets // 通用常量类
- │ ├──components
- │ │ ├──ChannelSelection.ets // 精选频道选择组件
- │ │ ├──HeaderToolBar.ets // 头部工具栏组件
- │ │ ├──MySubscription.ets // 我的订阅组件
- │ │ ├──NewsContent.ets // 新闻内容组件
- │ │ └──TabsWithBarIcon.ets // 附带右侧图标的Tabs容器组件
- │ ├──entryability
- │ │ └──EntryAbility.ets
- │ ├──model
- │ │ ├──ChannelData.ets // 频道数据类
- │ │ └──NewsData.ets // 新闻数据类
- │ ├──pages
- │ │ ├──ChannelEditSheet.ets // 频道编辑页
- │ │ └──HomePage.ets // 应用首页
- │ └──utils
- │ └──ArrayUtil.ets // 数组处理类
- └──entry/src/main/resources // 应用资源目录
参考文档
Grid
GridItem
半模态转场
代码下载
频道选择示例代码