华为仓颉鸿蒙HarmonyOS NEXT原生UI容器组件Refresh(下拉刷新/上拉加载更多)

可以进行页面下拉操作并显示刷新动效的容器组件。

子组件

支持单个子组件。

构造函数

init(RefreshParams,() -> Unit)

public init(rp: RefreshParams, content: () -> Unit)

创建refresh组件。

参数名 参数类型 必填 默认值 描述
rp RefreshParams - 设置组件刷新时的参数。
content () -> Unit 声明容器子组件。

枚举说明

RefreshStatus

下拉状态。

枚举值 描述
Inactive 默认未下拉状态。
Drag 下拉中,下拉距离小于刷新距离。
OverDrag 下拉中,下拉距离超过刷新距离。
Refresh 下拉结束,回弹至刷新距离,进入刷新状态。
Done 刷新结束,返回初始状态(顶部)。

自定义类型说明

RefreshParams

构造函数

init(Bool, Length, Int32)

public init(refreshing!: Bool, offset!: Length = 16.vp, friction!: Int32 = 62)

RefreshParams构造函数。

参数名 参数类型 必填 默认值 描述
refreshing Bool - 当前组件是否正在刷新。
offset Length 16.vp 下拉起点距离组件顶部的距离,单位vp。已废弃,无替代接口说明:offset取值范围(0vp,64vp)。当入参小于等于0.vp时,按默认值16.vp处理;大于64vp按照64vp处理。不支持百分比,不支持负数。
friction Int32 62 列表项间距。列表项之间会有一定的初始高度,当设置了space后,列表项间距为初始高度加上space设置的高度。

init((Bool, (Bool) -> Unit), Length, Int32)

public init(refreshing!: (Bool, (Bool) -> Unit), offset!: Length = 16.vp, friction!: Int32 = 62)

RefreshParams构造函数。

参数名 参数类型 必填 默认值 描述
refreshing (Bool,(Bool) -> Unit) - 当前组件是否正在刷新。
offset Length 16.vp 下拉起点距离组件顶部的距离,单位vp。已废弃,无替代接口说明:offset取值范围(0vp,64vp)。当入参小于等于0.vp时,按默认值16.vp处理;大于64vp按照64vp处理。不支持百分比,不支持负数。
friction Int32 62 列表项间距。列表项之间会有一定的初始高度,当设置了space后,列表项间距为初始高度加上space设置的高度。

事件

onStateChange((RefreshStatus)-> Unit)

public func onStateChange(callback: (RefreshStatus)-> Unit): This

设置刷新状态变更时,触发回调。

参数名 参数类型 描述
callback (RefreshStatus)-> Unit 当前刷新状态变更时,触发回调。- RefreshStatus:刷新状态。

onRefreshing(()-> Unit)

public func onRefreshing(callback: ()-> Unit): This

设置进入刷新状态时,触发回调。

参数名 参数类型 描述
callback () => void 进入刷新状态时触发回调。

示例代码

本示例展示了Refresh的基础用法。

import ohos.base.*
    import ohos.component.*
    import ohos.state_manage.*
    import ohos.state_macro_manage.*
    
    @Entry
    @Component
    class MyView {
        @State var isRefreshing: Bool = false
        @State var arr: Array<String> = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
    
        func build(){
            Column() {
                Refresh(RefreshParams(refreshing: @Binder(this.isRefreshing))) { 
                    List() {
                        ForEach(this.arr,itemGeneratorFunc: {item: String, idx: Int64 =>
                                ListItem() {
                                    Text(""+item)
                                        .width(100.percent)
                                        .height(100)
                                        .fontSize(16)
                                        .textAlign(TextAlign.Center)
                                        .borderRadius(10)
                                        .backgroundColor(0xFFFFFF)
                                }
                            },
                            keyGeneratorFunc: {item: String, idx: Int64 => return item})
                    }.onScrollIndex({first: Int32, last: Int32 =>
                            AppLog.info("list onScrollIndex")
                            AppLog.info("fist:" + first.toString())
                            AppLog.info("last:" + last.toString())
                        }
                    )
                    .width(100.percent)
                    .height(100.percent)
                    .divider(strokeWidth: 1.vp, color: Color(0xFfff00),startMargin: 10.vp, endMargin: 10.vp)
                    .scrollBar(BarState.Off)
                }
                .id("refresh")
                .onStateChange(
                    {
                        refreshStatus: RefreshStatus =>
                        AppLog.info("Refresh onStatueChange state is: " + refreshStatus.toString())
                    }
                ).onRefreshing({=>
                        AppLog.info("onRefreshing this.isRefreshing is is======= ${isRefreshing}")
                        AppLog.info("onRefreshing test")
                    }
                ).backgroundColor(0x89CFF0)
            }
        }
    }

图片

posted @ 2024-12-23 20:57  BisonLiu  阅读(74)  评论(0)    收藏  举报