HarmonyOS 鸿蒙Next怎么实现组织机构树的单选、多选、全选,组织机构树可折叠展开
HarmonyOS 鸿蒙Next怎么实现组织机构树的单选、多选、全选,组织机构树可折叠展开
类似于elementui的这种效果
更多关于HarmonyOS 鸿蒙Next怎么实现组织机构树的单选、多选、全选,组织机构树可折叠展开的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
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
在HarmonyOS鸿蒙Next中实现组织机构树的单选、多选、全选以及可折叠展开功能,可以通过以下方式实现:
-
数据结构设计:
- 设计一个包含节点信息的类,每个节点包含其子节点列表、是否被选中状态以及是否展开状态。
-
UI组件实现:
- 使用鸿蒙的List或Tree组件来展示组织机构树。
- 每个节点可以使用自定义组件来表示,包含文本(节点名称)、复选框(用于选择)以及可能的折叠/展开图标。
-
事件处理:
- 为每个节点的复选框绑定点击事件,处理单选、多选逻辑。
- 为折叠/展开图标绑定点击事件,控制节点的展开与折叠。
-
全选功能:
- 添加一个全选复选框,绑定点击事件。当点击时,遍历所有节点,设置其选中状态。
-
状态同步:
- 确保UI组件的状态(如复选框的选中状态、节点的展开状态)与数据模型中的状态保持同步。
-
性能优化:
- 对于大型组织机构树,考虑使用虚拟列表技术来提高性能。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html