鸿蒙开发基础 —— UI开发之 PullToRefresh组件

📑往期推文全新看点(文中附带最新·鸿蒙全栈学习笔记)

✒️ 鸿蒙(HarmonyOS)北向开发知识点记录~

✒️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~

✒️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

✒️ 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~

✒️ 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?

✒️ 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?

✒️ 记录一场鸿蒙开发岗位面试经历~

✒️ 持续更新中……


简介

PullToRefresh是一款OpenHarmony环境下可用的下拉刷新、上拉加载组件。 支持设置内置动画的各种属性,支持设置自定义动画,支持lazyForEarch的数据作为数据源。

效果展示:

内置动画效果

下载安装

ohpm install @ohos/pulltorefresh

使用说明

快速使用

// V1装饰器下的使用方式
import { PullToRefresh } from '@ohos/pulltorefresh'

// 需绑定列表或宫格组件
private scroller: Scroller = new Scroller();

PullToRefresh({
// 必传项,列表组件所绑定的数据
data: $data,
// 必传项,需绑定传入主体布局内的列表或宫格组件
scroller: this.scroller,
// 必传项,自定义主体布局,内部有列表或宫格组件
customList: () => {
  // 一个用@Builder修饰过的UI方法
  this.getListView();
},
// 可选项,下拉刷新回调
onRefresh: () => {
  return new Promise<string>((resolve, reject) => {
    // 模拟网络请求操作,请求网络2秒后得到数据,通知组件,变更列表数据
    setTimeout(() => {
      resolve('刷新成功');
      this.data = [...this.dataNumbers];
    }, 2000);
  });
},
// 可选项,上拉加载更多回调
onLoadMore: () => {
  return new Promise<string>((resolve, reject) => {
    // 模拟网络请求操作,请求网络2秒后得到数据,通知组件,变更列表数据
    setTimeout(() => {
      resolve('');
      this.data.push("增加的条目" + this.data.length);
    }, 2000);
  });
},
customLoad: null,
customRefresh: null,
})

// V2装饰器下的使用方式
import { PullToRefreshV2 } from '@ohos/pulltorefresh'

// 需绑定列表或宫格组件
private scroller: Scroller = new Scroller();

PullToRefreshV2({
   // 可选项,列表组件所绑定的数据
   data: this.data,
   // 必传项,需绑定传入主体布局内的列表或宫格组件
   scroller: this.scroller,
   // 必传项,自定义主体布局,内部有列表或宫格组件
   customList: () => {
      // 一个用@Builder修饰过的UI方法
      this.getListView();
   },
   // 可选项,下拉刷新回调
   onRefresh: () => {
      return new Promise<string>((resolve, reject) => {
         // 模拟网络请求操作,请求网络2秒后得到数据,通知组件,变更列表数据
         setTimeout(() => {
            resolve('刷新成功');
            this.data = [...this.dataNumbers];
         }, 2000);
      });
   },
   // 可选项,上拉加载更多回调
   onLoadMore: () => {
      return new Promise<string>((resolve, reject) => {
         // 模拟网络请求操作,请求网络2秒后得到数据,通知组件,变更列表数据
         setTimeout(() => {
            resolve('');
            this.data.push("增加的条目" + this.data.length);
         }, 2000);
      });
   },
   customLoad: null,
   customRefresh: null,
})

设置属性示例和设置自定义动画示例请看示例entry

使用限制

1、目前只支持List、Scroll、Tabs、Grid和WaterFlow系统容器组件;
2、暂不支持设置系统容器组件的弹簧效果和阴影效果,使用时需要将系统组件edgeEffect属性的值设置为(EdgeEffect.None);
3、暂不支持页面触底时自动触发上拉加载功能;
4、暂不支持在页面数据不满一屏时触发上拉加载功能;
5、暂不支持通过代码的方式去触发下拉刷新功能;
6、暂不支持在下拉刷新动画结束时提供手势结束的回调;

支持lazyForEarch的数据作为数据源

LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当LazyForEach在滚动容器中使用了,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会进行组件销毁回收以降低内存占用 接口描述:

LazyForEach(
    dataSource: IDataSource,             // 需要进行数据迭代的数据源
    itemGenerator: (item: any, index?: number) => void,  // 子组件生成函数
    keyGenerator?: (item: any, index?: number) => string // 键值生成函数
): void

IDataSource类型说明

interface IDataSource {
    totalCount(): number; // 获得数据总数
    getData(index: number): Object; // 获取索引值对应的数据
    registerDataChangeListener(listener: DataChangeListener): void; // 注册数据改变的监听器
    unregisterDataChangeListener(listener: DataChangeListener): void; // 注销数据改变的监听器
}

DataChangeListener类型说明

interface DataChangeListener {
    onDataReloaded(): void; // 重新加载数据时调用
    onDataAdded(index: number): void; // 添加数据时调用
    onDataMoved(from: number, to: number): void; // 数据移动起始位置与数据移动目标位置交换时调用
    onDataDeleted(index: number): void; // 删除数据时调用
    onDataChanged(index: number): void; // 改变数据时调用
    onDataAdd(index: number): void; // 添加数据时调用
    onDataMove(from: number, to: number): void; // 数据移动起始位置与数据移动目标位置交换时调用
    onDataDelete(index: number): void; // 删除数据时调用
    onDataChange(index: number): void; // 改变数据时调用
}

具体使用请看 openharmony:LazyForEach:数据懒加载

属性(接口)说明

PullToRefresh/PullToRefreshV2组件属性

属性类型释义默认值
dataObject[]undefined列表或宫格组件所绑定的数据
scrollerScroller列表或宫格组件所绑定的Scroller对象undefined
customList() => void自定义主体布局,内部有列表或宫格组件undefined
refreshConfiguratorPullToRefreshConfigurator组件属性配置PullToRefreshConfigurator
mWidthLength容器宽undefined(自适应)
mHeightLength容器高undefined(自适应)
onRefresh() => Promise<string>下拉刷新回调1秒后结束下拉刷新动画并提示“刷新失败”
onLoadMore() => Promise<string>上拉加载更多回调1秒后结束上拉加载动画
customRefresh() => void自定义下拉刷新动画布局undefined
onAnimPullDown`(value?: number, width?: number, height?: number) => voidundefined`下拉中回调
onAnimRefreshing`(value?: number, width?: number, height?: number) => voidundefined`刷新中回调
customLoad() => void自定义上拉加载动画布局undefined
onAnimPullUp`(value?: number, width?: number, height?: number) => voidundefined`上拉中回调
onAnimLoading`(value?: number, width?: number, height?: number) => voidundefined`加载中回调

PullToRefreshConfigurator类接口

接口参数类型释义默认值
setHasRefreshboolean是否具有下拉刷新功能true
setHasLoadMoreboolean是否具有上拉加载功能true
setMaxTranslatenumber可下拉上拉的最大距离100
setSensitivitynumber下拉上拉灵敏度0.7
setListIsPlacementboolean滑动结束后列表是否归位true
setAnimDurationnumber滑动结束后,回弹动画执行时间150
setRefreshHeightnumber下拉动画高度30
setRefreshColorstring下拉动画颜色‘#999999’
setRefreshBackgroundColorResourceColor下拉动画区域背景色‘rgba(0,0,0,0)’
setRefreshTextColorResourceColor下拉加载完毕后提示文本的字体颜色‘#999999’
setRefreshTextSizenumber 或 string 或 Resource下拉加载完毕后提示文本的字体大小18
setRefreshAnimDurationnumber下拉动画执行一次的时间,仅在自定义下拉刷新动画时有效1000
setRefreshCompleteTextHoldTimenumber下拉刷新完毕后, 刷新成功文本停留的时间1000
setLoadImgHeightnumber上拉动画中图片的高度30
setLoadBackgroundColorResourceColor上拉动画区域背景色‘rgba(0,0,0,0)’
setLoadTextColorResourceColor上拉文本的字体颜色‘#999999’
setLoadTextSizenumber 或 string 或 Resource上拉文本的字体大小18
setLoadTextPullUp1string上拉1阶段文本‘正在上拉刷新…’
setLoadTextPullUp2string上拉2阶段文本‘放开刷新’
setLoadTextLoadingstring上拉加载更多中时的文本‘正在玩命加载中…’
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值