鸿蒙自定义刷新组件使用

前言

DevEco Studio版本:4.0.0.600

1、RefreshLibrary_HarmonyOS.har,用于HarmonyOS

        "minAPIVersion": 9,

        "targetAPIVersion": 9,

        "apiReleaseType": "Release",

        "compileSdkVersion": "3.2.3.6",

        "compileSdkType": "HarmonyOS"

2、RefreshLibrary_OpenHarmony.har , 用于OpenHarmony

        "minAPIVersion": 9,

        "targetAPIVersion": 10,

        "apiReleaseType": "Release",

        "compileSdkVersion": "4.0.10.13",

         "compileSdkType": "OpenHarmony"

注:下面示例都是以RefreshLibrary_OpenHarmony.har 为例

使用效果:

  

har包下载:

下载地址:https://download.csdn.net/download/Abner_Crazy/88754702

如何使用

第一步:har包引用

参考文档:

Harmony如何引用har包

List列表使用

通过上面的下载链接下载之后,把har包复制到项目中,在项目src/main目录下新建目录lib,将har包复制进去。

然后在项目的oh-package.json5中添加对har包的引用,添加完成后会报错,只需要将鼠标放在错误处,出现Run 'ohpm install'后执行下就行了。

"dependencies": {
 "@app/RefreshLibrary": "file:./src/main/libs/RefreshLibrary_OpenHarmony.har"
}

第二步:查看引用是否成功

引用成功后会在项目目录下生成一个oh_modules目录,如果有@app/RefreshLibrary则成功,无则失败。

第三步:代码使用

1、RefreshListView调用(带默认刷新头部和尾部)
RefreshListView({
   list: this.list,
   controller: this.controller,
   refreshLayout: (item, index): void => this.itemLayout(item, index),
   onItemClick: (item, index) => {
      console.info("Index------   点击了:index: " + index + " item: " + item)
   },
   onRefresh: () => {
      //下拉刷新
   },
   onLoadMore: () => {
      //上拉加载
   }
})

参数解释:

属性是否必须描述
list必须数据源,数组类型
controller必须

刷新控件的控制器,控制关闭下拉刷新和上拉加载

finishRefresh():关闭下拉刷新

finishLoadMore():关闭上拉加载

refreshLayout必须子item的视图
onRefresh非必须下拉刷新的回调
onLoadMore非必须上拉加载的回调
onItemClick非必须item的点击事件回调
2、RefreshView调用(刷新头部和尾部需要自定义)
RefreshView({
   list: this.list,
   controller: this.controller,
   headerLayout: () => this.headerLayout(), //下拉刷新布局
   footLayout: () => this.footLayout(), //上拉加载布局
   refreshLayout: (item, index): void => this.itemLayout(item, index),
   onItemClick: (item, index) => {
      console.info("Index------   点击了:index: " + index + " item: " + item)
   },
   onRefresh: () => {
      //下拉刷新
   },
   onLoadMore: () => {
      //上拉加载
   }
})

参数解释:

属性是否必须描述
list必须数据源,数组类型
controller必须

刷新控件的控制器,控制关闭下拉刷新和上拉加载

finishRefresh():关闭下拉刷新

finishLoadMore():关闭上拉加载

refreshLayout必须子item的视图
headerLayout必须自定义下拉刷新的视图样式
footLayout必须自定义上拉加载的视图样式
onRefresh非必须下拉刷新的回调
onLoadMore非必须上拉加载的回调
onItemClick非必须item的点击事件回调

第四步:详细示例

import { RefreshController, RefreshView, RefreshListView } from "@app/RefreshLibrary"

@Entry
@Component
struct Index {
   @State list: Array<number> = []
   @State controller: RefreshController = new RefreshController()

   aboutToAppear() {
      this.refreshData()
   }

   // 刷新测试数据
   private refreshData() {
      this.list = []
      for (var i = 0; i < 10; i++) {
         this.list.push(i)
      }
   }

   // 加载更多测试数据
   private loadMoreData() {
      let initValue = this.list[this.list.length-1] + 1
      this.list.push(initValue)
   }

   @Builder
   itemLayout(item: object, index: number) {
      Text("我是测试数据: " + index)
         .width("95%")
         .height(50)
         .margin(10)
         .textAlign(TextAlign.Center)
         .border({ width: 1, color: Color.Blue })
   }

   @Builder
   headerLayout() {
      Text("我是自定义头部")
         .width("100%")
         .height(50)
         .margin(10)
         .textAlign(TextAlign.Center)
   }

   @Builder
   footLayout() {
      Text("我是自定义底部")
         .width("100%")
         .height(50)
         .margin(10)
         .textAlign(TextAlign.Center)
   }

   build() {
      Stack() {
         RefreshView({
            list: this.list,
            controller: this.controller,//如果是3.1的DevEcoStudio,this.controller会报错,使用$controller代替
            headerLayout: () => this.headerLayout(), //下拉刷新布局
            footLayout: () => this.footLayout(), //上拉加载布局
            refreshLayout: (item, index): void => this.itemLayout(item, index),
            onItemClick: (item, index) => {
               console.info("Index------   点击了:index: " + index + " item: " + item)
            },
            onRefresh: () => {
               //下拉刷新
               console.info("Index------   onRefresh")
               //模拟数据加载
               setTimeout(() => {
                  this.controller.finishRefresh()
                  this.refreshData()
               }, 2000)
            },
            onLoadMore: () => {
               //上拉加载
               console.info("Index------   onLoadMore")
               //模拟数据加载
               setTimeout(() => {
                  this.controller.finishLoadMore()
                  this.loadMoreData()
               }, 2000)
            }
         })

         // RefreshListView({
         //    list: this.list,
         //    controller: this.controller,
         //    // headerLayout: () => this.headerLayout(), //下拉刷新布局
         //    // footLayout: () => this.footLayout(), //上拉加载布局
         //    refreshLayout: (item, index): void => this.itemLayout(item, index),
         //    onItemClick: (item, index) => {
         //       console.info("Index------   点击了:index: " + index + " item: " + item)
         //    },
         //    onRefresh: () => {
         //       //下拉刷新
         //       console.info("Index------   onRefresh")
         //       //模拟数据加载
         //       setTimeout(() => {
         //          this.controller.finishRefresh()
         //          this.refreshData()
         //       }, 2000)
         //    },
         //    onLoadMore: () => {
         //       //上拉加载
         //       console.info("Index------   onLoadMore")
         //       //模拟数据加载
         //       setTimeout(() => {
         //          this.controller.finishLoadMore()
         //          this.loadMoreData()
         //       }, 2000)
         //    }
         // })
      }
      .width('100%')
      .height('100%')
   }
}

第五步:使用自定义headerLayout和footLayout效果

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/342904.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】Redis如何实现key的过期删除

​ &#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Redis ⛳️ 功不唐捐&#xff0c;玉汝于成 ​ 目录 前言 正文 结语 我的其他博客 前言 在当今信息时代&#xff0c;数据的快速存储和高效检索成为了软件系统设计中的核心需求。Redis作为…

idea中git提交代码更改作者名字

代码提交远程的时候显示的是上一个离职同事的用户名&#xff0c;有两种方法进行更改 在C盘【C:\Users\Administrator】中找到.gitconfig文件 进行更改 打开文件 将姓名以及邮箱改成自己的即可 [user] name xxxxx email xxxxx163.com 如图所示 命令行更改 在Termi…

ESP32-WROVER-DEV连接W5500实现有线网络

目的&#xff1a;ESP32-WROVER-DEV相机模块连接W5500模块&#xff0c;实现有线网络的连接。 开发环境&#xff1a;Arduino 2.1.1 可以实现的功能&#xff1a;可以使用web的ping访问&#xff0c;ESP32的LED IO2闪烁。 硬件连接如下图&#xff1a; 模块硬件的导线连接 W5500 …

SpringBoot项目整合MybatisPlus并使用SQLite作为数据库

文章目录 SQLite介绍搭建项目创建项目修改pom.xml SQLite查看SQLite是否安装创建数据库创建数据表IDEA连接SQLitenavicat连接SQLite数据库 后端增删改查接口实现MybatisX生成代码不会生成看这个UserUserMapperUserMapper.xml controller创建配置文件application.yaml启动类Incr…

行测-判断:2.类比推理

行测-判断&#xff1a;2.类比推理 给出一组相关的词&#xff0c;要求通过观察分析&#xff0c;在备选答案中找出一组与之在逻辑关系上最为贴近或相似的词。 1. 语义关系★★ 1.1 近义关系&#xff0c;反义关系 C&#xff0c;反义词 B&#xff0c;BD 都是近义词&#xff0c;考…

JavaEE-SSM-订单管理-后端增删改查(二)

.2.5 添加 编写OrderMapper接口中的insert方法 编写OrderService接口中的save方法 编写OrderServiceImpl实现类中的save方法 编写OrderController中的add方法 编写OrderMapper接口中的insert方法 /*** 插入* param order* return*/Insert("insert into order(oid,pr…

MySQL之数据库DDL

文章目录 MySQL数据库基本操作数据定义DDL对数据库的常用操作创建表修改表格式结构 MySQL数据库基本操作 首先我们先了解SQL的语言组成&#xff0c;他分为四个部分 数据定义语言&#xff08;DDL&#xff09;数据操纵语言&#xff08;DML&#xff09;数据控制语言&#xff08;…

如何使用宝塔面板搭建Typecho博客站点并结合内网穿透远程访问

文章目录 前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 前言 Typecho是由type和echo两个词合成的&#xff0c;来自于开发团队的头脑风暴。Typecho基于PHP5开发&#xff0c;支持多种数据库&#…

算法(4)——前缀和

目录 一、前缀和的定义 二、一维前缀和 三、一维前缀和OJ题 3.1、前缀和 3.2、寻找数组中心下标 3.3、除自身以外数组的乘积 3.4、和为K的数组 3.5、和可被K整除的子数组 3.6、连续数组 四、二位前缀和 4.1、二维前缀和 4.2、矩阵区域和 一、前缀和的定义 对于一个…

Quartz框架中的Corn表达式

Cron 表达式是一个字符串&#xff0c;分为 6 或 7 个域&#xff0c;每一个域代表一个含义 Cron 有如下两种语法格式&#xff1a; &#xff08;1&#xff09;Seconds Minutes Hours Day Month Week Year &#xff08;2&#xff09;Seconds Minutes Hours Day Month Week 一、…

Java SE:面向对象(下)

1. static关键字 静态区的特点&#xff1a;静态区里面的每一样东西都是唯一有且仅有一个的&#xff0c;如此时str1 "abc"即此时静态区里面已经创建了字符串abc并将abc地址赋给str1&#xff0c;后面在进行赋值也不会在静态区开辟一串新的"abc" 1.1 static修…

蓝桥杯省赛无忧 课件38 第4次学长带练配套课件

01 最大数组和 02 四元组问题 03 鸡哥的购物挑战 04 冒险者公会 05 明日方舟大挑战 06 七段码

一.Winform使用Webview2(Edge浏览器核心) 创建demo(Demo1)实现回车导航到指定地址

Winform使用Webview2创建demo1实现回车导航到指定地址 往期目录参考文档实现1.安装visual studio2.创建单窗口应用3.修改项目中的窗体名称MainForm4.添加按钮5.添加窗口Demo16.在Demo1中添加WebView2 SDK7.在Demo1窗体中选择添加textbox和webview28.在MainForm.cs窗体中添加but…

idea——git提交到本地记录如何退回/删除

目录 一、git提交到本地记录如何退回/删除 一、git提交到本地记录如何退回/删除 git提交到本地记录&#xff0c;如下图【更新】记录&#xff0c;表示本次提交到git本地需要退回/删除的操作&#xff1a; 选中项目&#xff0c;右键点击【git】——>【Show History】——>…

vscode运行python,终端能正常运行,输出(Code Runner)不能正常运行

右键->Run Code报错&#xff1a; [Done] exited with code9009 in 0.111 seconds 我的解决方案&#xff1a;仔细检查自己选的python.exe&#xff08;解释器&#xff09;在path环境变量中是否存在或路径是否正确&#xff01;&#xff01;&#xff01; 我就是太自信了&#xf…

REVIT二次开发 自动门窗墙体标注

步骤1 步骤2 步骤3 using System; using System.Collections.Generic; using System.Linq; using System

爬虫安居客新房

一、首先看网址 后面有全部代码 https://hf.fang.anjuke.com/loupan/baohequ/p3 这种形式很好分析&#xff0c;https://hf.fang.anjuke.com/loupan/行政区域页码 xinfang_area ["feixixian", "baohequ", "shushanqu", "luyangqu",…

梯度消失是什么意思

梯度 在数学和计算机科学中&#xff0c;梯度是一个向量&#xff0c;表示函数在某一点处的变化率和变化的方向。梯度是多变量函数的偏导数组成的向量。 在机器学习中&#xff0c;梯度也被称为损失函数对模型参数的偏导数。当我们训练一个模型时&#xff0c;通过梯度下降法或其变…

外包干了4个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

大模型日报-20240122

清华、小米、华为、 vivo、理想等多机构联合综述&#xff0c;首提个人LLM智能体、划分5级智能水平 https://mp.weixin.qq.com/s/JYB4BzsXhWF8pEUUkvn_GQ 想必这些唤醒词中至少有一个曾被你的嘴发出并成功呼唤出了一个能给你导航、讲笑话、添加日程、设置闹钟、拨打电话的智能个…