OpenHarmony实战开发-Grid和List内拖拽交换子组件位置。

介绍

本示例分别通过onItemDrop()和onDrop()回调,实现子组件在Grid和List中的子组件位置交换。

效果图预览

在这里插入图片描述
使用说明:

  1. 拖拽Grid中子组件,到目标Grid子组件位置,进行两者位置互换。
  2. 拖拽List中子组件,到目标List子组件位置,进行两者位置互换。

实现思路

1.在Grid组件中,通过editMode()打开编辑模式、通过onItemDragStart()指定拖拽时样式、通过onItemDrop()指定拖拽释放时的行为。

Grid() { ... }
.editMode(true) // 设置Grid进入编辑模式
.onItemDragStart((event: ItemDragInfo, itemIndex: number) => { // 设置拖拽过程中显示的图形this.movedItem = this.appInfoList[itemIndex]; // 记录原位置子组件信息return this.itemWhileDrag(); 
})
.onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => { // 拖拽释放时,触发回调// isSuccess=false时,说明drop的位置在grid外部;insertIndex > length时,说明有新增元素的事件发生if (isSuccess && insertIndex < this.appInfoList.length) {this.changeIndex(itemIndex, insertIndex); // 互换子组件index值}
})

2.在List组件中,通过ListItem的onDragStart()方法指定拖拽开始时的行为,通过List的onTouch()指定拖拽释放时的行为。

List({ space: LIST_SPACE }) {ForEach(this.appInfoList, (item: AppInfo, index) => {ListItem() { ... }.onDragStart(() => {item.visible = false; // 拖拽时,设置子组件原位置图标不可见}).onTouch((event: TouchEvent) => { // 拖拽释放时,记录目标位置子组件index值if (event.type === TouchType.Down) {this.dragIndex = index;}})})
}
.onDrop((event: DragEvent, extraParams: string) => {let jsonString: JsonObjType = JSON.parse(extraParams) as JsonObjType; // 通过参数extraParams获取原位置子组件index值this.changeIndex(this.dragIndex, jsonString.insertIndex); // 互换子组件index值this.appInfoList[jsonString.insertIndex].visible = true; // 完成互换后,设置子组件原位置图标不可见
})

高性能知识点

不涉及

模块依赖

@ohos/routermodule(动态路由)

工程结构&模块类型

dragandexchange                  // har类型               
|---pages                                       
|---|---Launcher.ets             // 页面层-方案主页面
|---view                                        
|---|---GridSceneView.ets        // 视图层-Grid拖拽页面             
|---|---ListSceneView.ets        // 视图层-List拖拽页面  
|---model                                     
|---|---AppInfo.ets              // 模型层-App信息模型 

如果大家还没有掌握鸿蒙,现在想要在最短的时间里吃透它,我这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

鸿蒙开发学习手册》:

如何快速入门:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.基本概念
2.构建第一个ArkTS应用
3.……

在这里插入图片描述

开发基础知识:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

在这里插入图片描述

基于ArkTS 开发:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

在这里插入图片描述

鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

鸿蒙生态应用开发白皮书V2.0PDF:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

HarmonyOS APP开发教程案列:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述


http://www.ppmy.cn/server/8745.html

相关文章

ChatGPT如何助力科研创新,提升研究效率?

随着人工智能技术的快速发展&#xff0c;其在科研领域的应用也愈发广泛。AI不仅提升了科研创新的效率&#xff0c;还为科研人员带来了前所未有的便利。本文将从ChatGPT深度科研应用、数据分析及机器学习、AI绘图以及高效论文撰写等方面&#xff0c;综述AI如何助力科研创新与效率…

Suno,属于音乐的ChatGPT时刻来临

AI绘画 AI视频我们见过了&#xff0c;现如今AI都能生成一首音乐&#xff0c;包括编曲&#xff0c;演唱&#xff0c;而且仅需几秒的时间便可创作出两分钟的完整歌曲 相信关注苏音的很大一部分都是从获取编曲或者混音插件来的&#xff0c;现如今AI却能帮你几秒生成曲子 今天就带…

kubernetes中的静态POD

我们都知道&#xff0c;pod是kubelet创建的&#xff0c;那么创建的流程是什么呐&#xff1f; 此时我们需要了解k8s中config.yaml配置文件了&#xff1a; 他的存放路径&#xff1a; 【/var/lib/kubelet/config.yaml】 一、查看静态pod的路径 [K8Sk8s-master ~]$ sudo cat /va…

算法刷题记录 Day52

算法刷题记录 Day52 Date: 2024.04.20 lc 84. 柱状图中最大的矩形 // 单调栈 class Solution { public:int largestRectangleArea(vector<int>& heights) {// 对于每个柱子&#xff0c;我们考虑按当前柱子进行中心扩散&#xff0c;直到找到其左侧及其右侧&#xf…

【Linux】简单的线程池

目录 线程池介绍 基本概念 定义 组成部分 线程池的优点 资源高效 响应迅速 可管理性 线程池的工作原理 线程池的使用场景 线程池的注意事项 实现简单的线程池 前置函数 Mutex 类介绍 LockGuard 类介绍 Log类的介绍 枚举定义 Log类 全局对象 Conf类 myThre…

SOCKS5代理IP指什麼?

SOCKS5代理IP是一種網路協議&#xff0c;它可以在客戶端和目標伺服器之間建立一個隧道&#xff0c;以進行數據交換&#xff0c;並隱藏用戶的真實IP地址。它是SOCKS協議的最新版本&#xff0c;不僅可以支持TCP和UDP協議&#xff0c;還支持各種類型的網路請求&#xff0c;包括HTT…

Redis key(BigKey、MoreKey)的存储策略

1. MoreKey 案例 1.1 大批量往 redis 里面 插入2000w 测试数据key (1) Linux Bash 下面执行&#xff0c;插入 100w rootspray:~# for((i1;i<100*10000;i)); do echo "set k$i v$i" >> /tmp/redisTest.txt; done; 查看 rootspray:~# more /tmp/redisTest.…

在Spring Boot中使用POI完成一个excel报表导入数据到MySQL的功能

最近看了自己玩过的很多项目&#xff0c;忽然发现有一个在实际开发中我们经常用到的功能&#xff0c;但是我没有正儿八经的玩过这个功能&#xff0c;那就是在Spring Boot中实现一个excel报表的导入导出功能&#xff0c;这篇博客&#xff0c;主要是围绕excel报表数据导入进行&am…

el-table-column叠加el-popover使用

需求&#xff1a;el-table-column有一列展示多个tag信息&#xff0c;实现点击tag展示tag信息以及tag对应的详细信息 table的数据格式 data:[{...,isPopoverVisible:false,},{...,isPopoverVisible:false,},... ]写法&#xff1a; <el-table-column label"配置信息&q…

Java工程maven中排包exclude的操作

一、背景 在开发项目时依赖了新的jar包&#xff0c;结果工程启动时报错了&#xff0c;此时应该是包依赖冲突的问题。 二、确定冲突的依赖包 执行mvn clean install&#xff0c;通过报错信息来确定冲突的jar包信息 三、排除冲突包的方案 有两种冲突的情况&#xff1a; 1&am…

排序算法。

***冒泡排序: 基本&#xff1a; private static void sort(int[] a){for (int i 0; i < a.length-1; i) {for (int j 0; j < a.length-i-1; j) {if (a[j]>a[j1]){swap(a,j,j1);}}}} private static void swap(int[] a,int i,int j){int tempa[i];a[i]a[j];a[j]temp…

RestClient操作Elasticsearch(Java)

Es官方提供了各种不用语言的客户端&#xff0c;用来操作Es&#xff0c;这些客户端的本质就是组装DSL语句&#xff0c;通过http请求发送给Es&#xff0c;从而简化操作 es基础篇不熟悉参考一下博客&#xff1a;ElasticSearch入门篇-CSDN博客文章浏览阅读445次&#xff0c;点赞7次…

MathType安装导致的Word粘贴操作出现运行时错误‘53’:文件未找到:MathPage.WLL

MathType安装导致的Word粘贴操作出现运行时错误‘53’&#xff1a;文件未找到&#xff1a;MathPage.WLL 解决方案 1、确定自己电脑的位数&#xff1b; 2、右击MathType桌面图标&#xff0c;点击“打开文件所在位置”&#xff0c;然后找到MathPage.WLL &#xff0c;复制一份进行…

docker初始化进程

docker run --init 是一个 Docker 命令的选项&#xff0c;用于在容器中运行一个初始化进程&#xff08;通常是 tini&#xff09;。这个初始化进程负责处理一些 Unix 信号&#xff08;如 SIGTERM 和 SIGCHLD&#xff09;&#xff0c;并确保容器中的进程能够正确地被管理和清理。…

Java学习笔记29(泛型)

1.泛型 ArrayList<Dog> arrayList new ArrayList<Dog>(); //1.当我们ArrayList<Dog>表示存放到ArrayList集合中的元素是Dog类 //2.如果编译器发现添加的类型&#xff0c;不满足要求&#xff0c;就会报错 //3.在便利的时候&#xff0c;可以直接取出Dog类型而…

深入理解JavaScript - Proxy模拟vue的代理

视频链接 ⚠️视频里使用proxy的代码不能用&#xff01;&#xff01;&#xff01; &#xff08;1&#xff09;简单使用 const obj {a: 1,b: 2,c: {a: 1,b: 2,}, }; let v obj.a; Object.defineProperty(obj, "a", {get() {console.log("读取", a);},se…

08-GPtimer

通用定时器 &#xff08;GPTimer&#xff09; 通用定时器简介 通用定时器可用于准确设定时间间隔、在一定间隔后触发&#xff08;周期或非周期的&#xff09;中断或充当硬件时钟。如下图所示&#xff0c;ESP32-S3 包含两个定时器组&#xff0c;即定时器组 0 和定时器组 1。每…

npm内部机制与核心原理

npm 的核心目标&#xff1a; Bring the best of open source to you, your team and your company. npm 最重要的任务是安装和维护开源库。 npm 安装机制与背后思想 npm 的安装机制非常值得探究。Ruby 的 Gem&#xff0c;Python 的 pip 都是全局安装机制&#xff0c;但是 npm …

Kali Linux如何开启ssh远程连接服务

在Kali Linux中开启SSH服务&#xff0c;可以按照以下步骤进行操作&#xff1a; 切换到管理员用户&#xff1a;在终端中输入su root&#xff0c;然后输入root用户的密码以切换到root用户。这是因为修改SSH服务的配置文件通常需要管理员权限。 安装SSH服务器&#xff1a;如果尚未…

Python零基础从小白打怪升级中~~~~~~~TCP网络编程

TCP网络编程 一、什么是TCP协议 TCP( Transmission control protocol )即传输控制协议&#xff0c;是一种面向连接、可靠的数据传输协议&#xff0c;它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。 面向连接 &#xff1a;数据传输之前客户端和…