HarmonyOS 上拉加载更多时候,页面会向上跳动,体验不是很好,有什么可以优化的办法吗?

HarmonyOS
6天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

建议直接使用三方库,PullToRefresh支持下拉刷新和上拉加载。

三方库地址:https://gitee.com/openharmony-sig/PullToRefresh

参考demo:

import { PullToRefresh } from "@ohos/pulltorefresh"
@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  build() {
    Column() {
      PullToRefreshDemo();
    }
    .width('100%')
    .height('100%')
  }
}
@Component
struct PullToRefreshDemo {
  @State refreshText: string = '';
  private dataNumbers: string[] = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'];
  private dataStrings: string[] = ['我的评论', '与我相关', '个人中心1', '个人中心2', '个人中心3'];
  @State data: string[] = this.dataStrings;
  // 需绑定列表或宫格组件
  private scroller: Scroller = new Scroller();
  @State height1: number = 780
  @State show: boolean = true
  build() {
    Column() {
      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,
      })
    }
  }
  @Builder
  private getListView() {
    List({ space: 20, scroller: this.scroller }) {
      ForEach(this.data, (item: string) => {
        ListItem() {
          Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) {
            Flex({
              direction: FlexDirection.Column,
              justifyContent: FlexAlign.SpaceBetween,
              alignItems: ItemAlign.Start
            }) {
              Text(item)
                .width('100%')
                .fontSize(20)
              Text('2023-12-05').fontSize(20)
            }
            Image($r('app.media.app_icon')).width(200).height(150)
          }
        }
      })
    }
    .backgroundColor('#eeeeee')
    .divider({ strokeWidth: 1, color: 0x222222 })
    .edgeEffect(EdgeEffect.None) // 必须设置列表为滑动到边缘无效果
  }
}
分享
微博
QQ
微信
回复
6天前
相关问题
HarmonyOS 加载更多
101浏览 • 1回复 待解决
鸿蒙很好画图功能可以使用
2670浏览 • 1回复 已解决
HarmonyOS 下拉刷新,加载示例
97浏览 • 1回复 待解决
HarmonyOS 下拉刷新,加载功能
93浏览 • 1回复 待解决
加载,下拉刷新组件
540浏览 • 1回复 待解决