鸿蒙next 下拉刷新上来加载 来了 我不允许你不会

前言

各位同学大家好, 有段时间没有给大家更新文章了 ,最近在开发 鸿蒙next中 有用到这个下拉刷新和上来加载的功能就准备写个文章分享一下 那么废话不多说 我们正式开始:

效果图

准备工作:

找到我们DevEco studio 的安装位置

找到我们ohpm 的bin目录

配置在环境变了中

新建

把我们的路径粘贴到这里然后确定

最后在cmd 输入ohpm 出现如图画面就是配置成功

打开项目

输入如下命令

bash 复制代码
ohpm install @ohos/pulltorefresh

出现安装成功提示即可

代码具体实现

定义2个数组模拟数据

typescript 复制代码
@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;

list界面展示

scss 复制代码
@Builder
private getListView() {
  List({ space: 20, scroller: this.scroller }) {
    ForEach(this.data, (item: string) => {
      ListItem() {
        Text(item)
          .width('100%')
          .height(150)
          .fontSize(20)
          .textAlign(TextAlign.Center)
          .backgroundColor('#95efd2')
      }
    })
  }
  .backgroundColor('#eeeeee')
  .divider({ strokeWidth: 1, color: 0x222222 })
  .edgeEffect(EdgeEffect.None) // 必须设置列表为滑动到边缘无效果
}

build 里面使用到我们 PullToRefresh 组件

typescript 复制代码
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,
    })
  }
}

加载list的方法

javascript 复制代码
customList: () => {
  // 一个用@Builder修饰过的UI方法
  this.getListView();
},

下拉刷新的回调方法

typescript 复制代码
onRefresh: () => {
  return new Promise<string>((resolve, reject) => {
    // 模拟网络请求操作,请求网络2秒后得到数据,通知组件,变更列表数据
    setTimeout(() => {
      resolve('刷新成功');
      this.data = this.dataNumbers;
    }, 2000);
  });
},

上拉加载更多的回调方法

typescript 复制代码
onLoadMore: () => {
  return new Promise<string>((resolve, reject) => {
    // 模拟网络请求操作,请求网络2秒后得到数据,通知组件,变更列表数据
    setTimeout(() => {
      resolve('');
      this.data.push("增加的条目" + this.data.length);
    }, 2000);
  });
},

完整代码

typescript 复制代码
import { PullToRefresh } from '@ohos/pulltorefresh'

@Entry
@Component
struct Index {
  @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();

  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() {
          Text(item)
            .width('100%')
            .height(150)
            .fontSize(20)
            .textAlign(TextAlign.Center)
            .backgroundColor('#95efd2')
        }
      })
    }
    .backgroundColor('#eeeeee')
    .divider({ strokeWidth: 1, color: 0x222222 })
    .edgeEffect(EdgeEffect.None) // 必须设置列表为滑动到边缘无效果
  }
}

最后总结 :

鸿蒙next中的上来加载下拉刷新有在ohpm有前人做好的很好三方库实现了 当然你也可以自己去编写计算滑动的高度坐标来处理上拉加载和下拉刷新。 今天的文章就讲到这里有兴趣的同学可以配置好ohpm的环境变量 然后使用三方来体验这个效果 同时也感谢开发三方的作者感谢你们。 也希望鸿蒙和华为发展越来越好,最后的最后 如果你觉得文章还不错麻烦给我三连 关注点赞和转发 如果了解更多鸿蒙开发的知识 可以关注坚果派公众号 。 谢谢

更多鸿蒙的学习和需求可以关注坚果派

坚果派:

坚果派由坚果等人联合创建,团队拥有12个华为HDE,以及若干其他领域的三十余位万粉博主运营。专注于研究的技术包括HarmonyOS/OpenHarmony,仓颉,AI、BlueOS操作系统等。主营业务是面向国内外客户提供新一代信息技术为核心的产品、解决方案和服务。团队聚焦"鸿蒙原生应用"、"智能物联"和"AI赋能"、"人工智能"四大业务领域,依托华为开发者专家等强大的技术团队,以及涵盖需求、开发、测试、运维于一体的综合服务体系,赋能文旅、媒体、社交、家居、消费电子等行业客户,满足客户数字化升级转型的需求,帮助客户实现价值提升,欢迎合作。

相关推荐
鑫宝Code8 分钟前
【React】React Router:深入理解前端路由的工作原理
前端·react.js·前端框架
Mr_Xuhhh1 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
永乐春秋2 小时前
WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性
前端
鸽鸽程序猿2 小时前
【前端】CSS
前端·css
ggdpzhk2 小时前
VUE:基于MVVN的前端js框架
前端·javascript·vue.js
学不会•4 小时前
css数据不固定情况下,循环加不同背景颜色
前端·javascript·html
活宝小娜7 小时前
vue不刷新浏览器更新页面的方法
前端·javascript·vue.js
程序视点7 小时前
【Vue3新工具】Pinia.js:提升开发效率,更轻量、更高效的状态管理方案!
前端·javascript·vue.js·typescript·vue·ecmascript
coldriversnow7 小时前
在Vue中,vue document.onkeydown 无效
前端·javascript·vue.js
我开心就好o7 小时前
uniapp点左上角返回键, 重复来回跳转的问题 解决方案
前端·javascript·uni-app