HarmonyOS 鸿蒙Next 实现下拉刷新+上拉加载的封装
下拉刷新
Refresh组件支持下拉刷新,包裹list组件,下拉事件中更新列表
@Entry
@Component
struct RefreshCase {
@State
refreshing: boolean = false
@Builder
refreshContent() {
Text('正在加载中...')
.width('100%')
.textAlign(TextAlign.Center)
.backgroundColor(Color.Pink)
}
@State
list: number[] = Array(20).fill(Date.now())
build() {
RelativeContainer() {
Refresh({ refreshing: $$this.refreshing, builder: this.refreshContent }) {
List() {
ForEach(this.list, (item: number) => {
ListItem() {
Row() {
Text(item.toString())
}.width('100%').padding(20).border({
width: {
bottom: 1
},
color: Color.Gray,
})
}
})
}
}.onRefreshing(() => {
setTimeout(() => {
this.list = Array(20).fill(Date.now())
this.refreshing = false
}, 1000)
})
}
.height('100%')
.width('100%')
}
}
上拉加载
image.png
注册三个事件,开始滚动,滚动结束,滚动至列表尾部(触发两次,滚动至+回弹)
设置变量是否滚动底部,开始滚动false,滚动至列表尾部true,滚动结束判断变量进行数据追加
@Entry
@Component
struct RefreshCase {
@State
refreshing: boolean = false
@Builder
refreshContent() {
Text('正在加载中...')
.width('100%')
.textAlign(TextAlign.Center)
.backgroundColor(Color.Pink)
}
scroller:Scroller = new Scroller()
@State
list: number[] = Array(20).fill(Date.now())
@State
isEnd: boolean = false
build() {
RelativeContainer() {
Refresh({ refreshing: $$this.refreshing, builder: this.refreshContent }) {
List({scroller:this.scroller}) {
ForEach(this.list, (item: number) => {
ListItem() {
Row() {
Text(item.toString())
}.width('100%').padding(20).border({
width: {
bottom: 1
},
color: Color.Gray,
})
}
})
}
.onScrollStart(() => {
this.isEnd = false
})
.onScrollStop(() => {
if(this.isEnd){
setTimeout(()=>{
this.list.push(...Array(10).fill(Date.now()))
promptAction.showToast({
message: '已添加10条数据'
})
this.scroller.scrollEdge(Edge.Bottom)
},1000)
}
})
.onReachEnd(() => {
this.isEnd = true
})
}.onRefreshing(() => {
setTimeout(() => {
this.list = Array(20).fill(Date.now())
this.refreshing = false
}, 1000)
})
}
.height('100%')
.width('100%')
}
}
更多关于HarmonyOS 鸿蒙Next 实现下拉刷新+上拉加载的封装的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于HarmonyOS 鸿蒙Next 实现下拉刷新+上拉加载的封装的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,实现下拉刷新与上拉加载的封装,可以基于组件化思想,通过自定义组件来实现。以下是实现思路及简要代码示例:
实现思路
- 创建自定义组件:定义一个包含列表显示区域及刷新和加载提示的自定义组件。
- 监听滚动事件:通过监听列表的滚动事件,判断用户是否进行了下拉或上拉操作。
- 处理下拉刷新:当用户下拉到顶部时,触发刷新逻辑。
- 处理上拉加载:当用户滚动到底部时,触发加载更多数据的逻辑。
简要代码示例
<!-- 自定义组件的XML布局 -->
<DirectionalLayout>
<RefreshComponent id="refresh" />
<ListContainer id="list" />
<LoadingPrompt id="loading" />
</DirectionalLayout>
// 自定义组件的JavaScript逻辑
export default {
onInit() {
this.$refs.refresh.onRefresh(() => {
// 刷新逻辑
});
this.$refs.list.onScrollBottom(() => {
// 加载更多数据逻辑
});
}
}
注意事项
- 确保
RefreshComponent
和ListContainer
等组件已正确实现。 - 滚动事件监听及数据处理逻辑需根据具体需求调整。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html