鸿蒙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赋能"、"人工智能"四大业务领域,依托华为开发者专家等强大的技术团队,以及涵盖需求、开发、测试、运维于一体的综合服务体系,赋能文旅、媒体、社交、家居、消费电子等行业客户,满足客户数字化升级转型的需求,帮助客户实现价值提升,欢迎合作。

相关推荐
logstach40 分钟前
QML-Grid和OpacityMask
前端·qml
C+ 安口木1 小时前
前端代码规范 - 日志打印规范
前端·代码规范
Jesse_Kyrie2 小时前
配置windows环境下独立浏览器爬虫方案【不依赖系统环境与chrome】
前端·chrome·爬虫·python·scrapy
copyer_xyf3 小时前
文件上传
前端·javascript
野槐3 小时前
CSS原子化
前端·css
#学习的路上3 小时前
Bean的管理
java·前端·数据库
香蕉麻花皮3 小时前
vue3 滚动条滑动到元素位置时,元素加载
前端·javascript·vue.js
Fipped3 小时前
Node.js迈向后端世界:从"Hello World"到"Hello Backend!"
前端
2401_857638033 小时前
【Perl CGI脚本全解析】打造动态Web应用的秘籍
前端·scala·perl
Delighted3 小时前
百度面试题:输入框的防抖节流
前端·javascript