鸿蒙ArkUI refresh组件的用法(附带示例)
Refresh 是可以进行页面下拉操作并显示刷新动效的容器组件。
Refresh 通过以下参数来设置当前组件是否正在刷新,或者在下拉时自定义刷新的样式:
Refresh的相关事件如下:
Refresh 组件的示例代码如下:

图 1 Refresh组件的示例效果(刷新前)

图 2 Refresh组件的示例效果(刷新中)

图 3 Refresh组件的示例效果(刷新后)
Refresh 通过以下参数来设置当前组件是否正在刷新,或者在下拉时自定义刷新的样式:
- refreshing:当前组件是否正在刷新。默认值为false。
- builder:下拉时,自定义刷新样式。
Refresh的相关事件如下:
- onStateChange(callback: (state: RefreshStatus) => void):当前刷新状态变更时,触发回调。
-
state:刷新状态的属性如下:
- Inactive:默认未下拉。值为 0。
- Drag:下拉中,下拉距离小于刷新距离。值为 1。
- OverDrag:下拉中,下拉距离超过刷新距离。值为 2。
- Refresh:下拉结束,回弹至刷新距离,进入刷新状态。值为 3。
- Done:刷新结束,返回初始状态(顶部)。值为 4。
- onRefreshing(callback: () => void):进入刷新状态时触发回调。
Refresh 组件的示例代码如下:
import { router } from '@kit.ArkUI';
import { Navbar as MyNavbar } from '../components/navBar';
interface HistoricalFigure {
name: string;
era: string;
contribution: string;
keyWorks: string[];
}
@Entry
@Component
struct RefreshCom {
@State desc: string = '';
@State isRefreshing: boolean = false;
@State historicalFigures: HistoricalFigure[] = [
{
name: "孔子",
era: "春秋时期",
contribution: "儒家学派创始人,提出仁、礼、孝等道德观念,影响深远。",
keyWorks: ["《论语》"]
},
{
name: "秦始皇",
era: "秦朝",
contribution: "中国历史上第一个统一六国的皇帝,推行中央集权制度,统一度量衡。",
keyWorks: ["兵马俑", "长城"]
},
{
name: "李白",
era: "唐朝",
contribution: "被誉为“诗仙”,创作了大量浪漫主义诗歌,代表作有《将进酒》等。",
keyWorks: ["《将进酒》", "《庐山谣》"]
},
{
name: "王阳明",
era: "明朝",
contribution: "心学集大成者,提出“知行合一”学说,影响后世。",
keyWorks: ["《传习录》"]
},
{
name: "孙中山",
era: "近现代",
contribution: "中国民主革命的先行者,提出三民主义,推翻封建帝制。",
keyWorks: ["《建国方略》"]
}
];
// 加载页面时接收传递过来的参数
onPageShow(): void {
// 获取传递过来的参数对象
const params = router.getParams() as Record<string, string>;
// 获取传递的值
if (params) {
this.desc = params.desc as string;
this.title = params.value as string;
}
}
// 自定义刷新样式的组件
@Builder CustomRefreshCom() {
Stack() {
Row() {
LoadingProgress().height(32)
Text('加载数据中...').fontSize(16).margin({ left: 20 })
}.alignItems(VerticalAlign.Center)
}
.width('100%')
.align(Alignment.Center)
// 设置最小高度约束,保证自定义组件的高度在随刷新区域高度变化时不会低于 minHeight
.constraintSize({ minHeight: 32 })
}
build() {
Column() {
MyNavbar({ title: this.title })
Divider().width('100%').strokeWidth(2).color(Color.Black)
Row() {
Text(`组件描述:${this.desc}`)
}
Column() {
Refresh({
refreshing: $$this.isRefreshing,
builder: this.CustomRefreshCom()
}) {
List() {
ForEach(this.historicalFigures, (item: HistoricalFigure) => {
ListItem() {
Column({ space: 5 }) {
Row() {
Text(item.name).fontSize(16)
Text(item.era).fontSize(16)
}
Row() {
Text(item.contribution).fontSize(16)
}
ForEach(item.keyWorks, (itemB: string) => {
Text(itemB).fontSize(16)
})
}
.width('70%')
.backgroundColor('#ffffff')
.borderRadius(10)
.margin(10)
}
})
}
.width('100%')
.height('100%')
.alignListItem(ListItemAlign.Center)
.scrollBar(BarState.Off)
.onStateChange((refreshStatus: RefreshStatus) => {
console.log(`打印当前状态:${refreshStatus}`)
})
.onRefreshing(() => {
// 初始化
setTimeout(() => {
this.historicalFigures.push({
name: "武则天",
era: "唐朝",
contribution: "中国历史上唯一的女皇帝,推行科举制度,促进文化发展。",
keyWorks: ["《垂拱集》"]
})
this.isRefreshing = false
}, 2000)
})
}
.backgroundColor('#e5e5e5')
.width('100%')
.height('100%')
}
}
}
}
上述示例代码的效果如下图所示:
图 1 Refresh组件的示例效果(刷新前)

图 2 Refresh组件的示例效果(刷新中)

图 3 Refresh组件的示例效果(刷新后)
ICP备案:
公安联网备案: