HarmonyOS 鸿蒙Next怎么实现组织机构树的单选、多选、全选,组织机构树可折叠展开

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

HarmonyOS 鸿蒙Next怎么实现组织机构树的单选、多选、全选,组织机构树可折叠展开

类似于elementui的这种效果


更多关于HarmonyOS 鸿蒙Next怎么实现组织机构树的单选、多选、全选,组织机构树可折叠展开的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

import { CallbackParam, NodeParam, TreeController, TreeListener, TreeListenerManager, TreeListenType, TreeView } from ‘@ohos.arkui.advanced.TreeView’;

@Entry @Component struct TreeViewDemo { private treeController: TreeController = new TreeController(); private treeListener: TreeListener = TreeListenerManager.getInstance().getTreeListener(); @State clickNodeId: number = 0;

// 销毁相关监听 aboutToDisappear(): void { this.treeListener.off(TreeListenType.NODE_CLICK, undefined); this.treeListener.off(TreeListenType.NODE_ADD, undefined); this.treeListener.off(TreeListenType.NODE_DELETE, undefined); this.treeListener.off(TreeListenType.NODE_MOVE, undefined); }

aboutToAppear(): void { this.treeListener.on(TreeListenType.NODE_CLICK, (callbackParam: CallbackParam) => { this.clickNodeId = callbackParam.currentNodeId; }); this.treeListener.on(TreeListenType.NODE_ADD, (callbackParam: CallbackParam) => { this.clickNodeId = callbackParam.currentNodeId; }); this.treeListener.on(TreeListenType.NODE_DELETE, (callbackParam: CallbackParam) => { this.clickNodeId = callbackParam.currentNodeId; }); this.treeListener.once(TreeListenType.NODE_MOVE, (callbackParam: CallbackParam) => { this.clickNodeId = callbackParam.currentNodeId; });

let normalResource: Resource = $r('app.media.app_icon');
let selectedResource: Resource = $r('app.media.startIcon');
let editResource: Resource = $r('app.media.background');
let nodeParam: NodeParam = {
  parentNodeId: -1, // 父节点Id
  currentNodeId: 1, // 节点Id
  isFolder: true, // 是否折叠
  icon: normalResource, // 默认图标
  selectedIcon: selectedResource, // 选中图标
  editIcon: editResource, // 编辑态图标
  primaryTitle: "Number1", // 节点标题内容
  secondaryTitle: "6" // 节点副标题文字内容
};
this.treeController
  .addNode(nodeParam)
  .addNode({
    parentNodeId: 1,
    currentNodeId: 2,
    isFolder: false,
    primaryTitle: "项目1_1"
  })
  .addNode({
    parentNodeId: -1,
    currentNodeId: 7,
    isFolder: true,
    primaryTitle: "目录2"
  })
  .addNode({
    parentNodeId: -1,
    currentNodeId: 23,
    isFolder: true,
    icon: normalResource,
    selectedIcon: selectedResource,
    editIcon: editResource,
    primaryTitle: "目录3"
  })
  .addNode({
    parentNodeId: -1,
    currentNodeId: 24,
    isFolder: false,
    primaryTitle: "项目4"
  })
  .addNode({
    parentNodeId: -1,
    currentNodeId: 31,
    isFolder: true,
    icon: normalResource,
    selectedIcon: selectedResource,
    editIcon: editResource,
    primaryTitle: "目录5",
    secondaryTitle: "0"
  })
  .buildDone();
this.treeController.refreshNode(-1, "父节点", "子节点");

}

build() { Column() { SideBarContainer(SideBarContainerType.Embed) { TreeView({ treeController: this.treeController }); Row() { Divider().vertical(true).strokeWidth(2).color(0x000000).lineCap(LineCapStyle.Round); Column({ space: 30 }) { Text(‘ClickNodeId=’ + this.clickNodeId).fontSize(‘16fp’); Button(‘Add’, { type: ButtonType.Normal, stateEffect: true }) .borderRadius(8).backgroundColor(0x317aff).width(90) .onClick((event: ClickEvent) => { this.treeController.addNode(); }); Button(‘Modify’, { type: ButtonType.Normal, stateEffect: true }) .borderRadius(8).backgroundColor(0x317aff).width(90) .onClick((event: ClickEvent) => { this.treeController.modifyNode(); }); Button(‘Remove’, { type: ButtonType.Normal, stateEffect: true }) .borderRadius(8).backgroundColor(0x317aff).width(120) .onClick((event: ClickEvent) => { this.treeController.removeNode(); }); }.height(‘100%’).width(‘70%’).alignItems(HorizontalAlign.Start).margin(10); } } .focusable(true) .showControlButton(false) .showSideBar(true); } } }


找到一个代码,你可以自己改下,主要是使用鸿蒙中TreeView组件,参考文档:

[https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ohos-arkui-advanced-treeview-V5#导入模块](https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ohos-arkui-advanced-treeview-V5#%E5%AF%BC%E5%85%A5%E6%A8%A1%E5%9D%97)

更多关于HarmonyOS 鸿蒙Next怎么实现组织机构树的单选、多选、全选,组织机构树可折叠展开的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


项目名称

  • 项目状态:进行中
  • 项目类型:开源
  • 项目标签:#开源 #进行中

项目链接


项目描述

这是一个示例项目,用于展示如何将HTML内容转换为Markdown。

示例图片

在HarmonyOS鸿蒙Next中实现组织机构树的单选、多选、全选以及可折叠展开功能,可以通过以下方式实现:

  1. 数据结构设计

    • 设计一个包含节点信息的类,每个节点包含其子节点列表、是否被选中状态以及是否展开状态。
  2. UI组件实现

    • 使用鸿蒙的List或Tree组件来展示组织机构树。
    • 每个节点可以使用自定义组件来表示,包含文本(节点名称)、复选框(用于选择)以及可能的折叠/展开图标。
  3. 事件处理

    • 为每个节点的复选框绑定点击事件,处理单选、多选逻辑。
    • 为折叠/展开图标绑定点击事件,控制节点的展开与折叠。
  4. 全选功能

    • 添加一个全选复选框,绑定点击事件。当点击时,遍历所有节点,设置其选中状态。
  5. 状态同步

    • 确保UI组件的状态(如复选框的选中状态、节点的展开状态)与数据模型中的状态保持同步。
  6. 性能优化

    • 对于大型组织机构树,考虑使用虚拟列表技术来提高性能。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部