当前位置:   article > 正文

鸿蒙自定义刷新组件使用_harmonyos 自定义下拉刷新

harmonyos 自定义下拉刷新

前言

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'后执行下就行了。

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

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

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

第三步:代码使用

1、RefreshListView调用(带默认刷新头部和尾部)
  1. RefreshListView({
  2. list: this.list,
  3. controller: this.controller,
  4. refreshLayout: (item, index): void => this.itemLayout(item, index),
  5. onItemClick: (item, index) => {
  6. console.info("Index------ 点击了:index: " + index + " item: " + item)
  7. },
  8. onRefresh: () => {
  9. //下拉刷新
  10. },
  11. onLoadMore: () => {
  12. //上拉加载
  13. }
  14. })

参数解释:

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

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

finishRefresh():关闭下拉刷新

finishLoadMore():关闭上拉加载

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

参数解释:

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

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

finishRefresh():关闭下拉刷新

finishLoadMore():关闭上拉加载

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

第四步:详细示例

  1. import { RefreshController, RefreshView, RefreshListView } from "@app/RefreshLibrary"
  2. @Entry
  3. @Component
  4. struct Index {
  5. @State list: Array<number> = []
  6. @State controller: RefreshController = new RefreshController()
  7. aboutToAppear() {
  8. this.refreshData()
  9. }
  10. // 刷新测试数据
  11. private refreshData() {
  12. this.list = []
  13. for (var i = 0; i < 10; i++) {
  14. this.list.push(i)
  15. }
  16. }
  17. // 加载更多测试数据
  18. private loadMoreData() {
  19. let initValue = this.list[this.list.length-1] + 1
  20. this.list.push(initValue)
  21. }
  22. @Builder
  23. itemLayout(item: object, index: number) {
  24. Text("我是测试数据: " + index)
  25. .width("95%")
  26. .height(50)
  27. .margin(10)
  28. .textAlign(TextAlign.Center)
  29. .border({ width: 1, color: Color.Blue })
  30. }
  31. @Builder
  32. headerLayout() {
  33. Text("我是自定义头部")
  34. .width("100%")
  35. .height(50)
  36. .margin(10)
  37. .textAlign(TextAlign.Center)
  38. }
  39. @Builder
  40. footLayout() {
  41. Text("我是自定义底部")
  42. .width("100%")
  43. .height(50)
  44. .margin(10)
  45. .textAlign(TextAlign.Center)
  46. }
  47. build() {
  48. Stack() {
  49. RefreshView({
  50. list: this.list,
  51. controller: this.controller,//如果是3.1的DevEcoStudio,this.controller会报错,使用$controller代替
  52. headerLayout: () => this.headerLayout(), //下拉刷新布局
  53. footLayout: () => this.footLayout(), //上拉加载布局
  54. refreshLayout: (item, index): void => this.itemLayout(item, index),
  55. onItemClick: (item, index) => {
  56. console.info("Index------ 点击了:index: " + index + " item: " + item)
  57. },
  58. onRefresh: () => {
  59. //下拉刷新
  60. console.info("Index------ onRefresh")
  61. //模拟数据加载
  62. setTimeout(() => {
  63. this.controller.finishRefresh()
  64. this.refreshData()
  65. }, 2000)
  66. },
  67. onLoadMore: () => {
  68. //上拉加载
  69. console.info("Index------ onLoadMore")
  70. //模拟数据加载
  71. setTimeout(() => {
  72. this.controller.finishLoadMore()
  73. this.loadMoreData()
  74. }, 2000)
  75. }
  76. })
  77. // RefreshListView({
  78. // list: this.list,
  79. // controller: this.controller,
  80. // // headerLayout: () => this.headerLayout(), //下拉刷新布局
  81. // // footLayout: () => this.footLayout(), //上拉加载布局
  82. // refreshLayout: (item, index): void => this.itemLayout(item, index),
  83. // onItemClick: (item, index) => {
  84. // console.info("Index------ 点击了:index: " + index + " item: " + item)
  85. // },
  86. // onRefresh: () => {
  87. // //下拉刷新
  88. // console.info("Index------ onRefresh")
  89. // //模拟数据加载
  90. // setTimeout(() => {
  91. // this.controller.finishRefresh()
  92. // this.refreshData()
  93. // }, 2000)
  94. // },
  95. // onLoadMore: () => {
  96. // //上拉加载
  97. // console.info("Index------ onLoadMore")
  98. // //模拟数据加载
  99. // setTimeout(() => {
  100. // this.controller.finishLoadMore()
  101. // this.loadMoreData()
  102. // }, 2000)
  103. // }
  104. // })
  105. }
  106. .width('100%')
  107. .height('100%')
  108. }
  109. }

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

  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/573676
推荐阅读
相关标签
  

闽ICP备14008679号