HarmonyOS 鸿蒙Next List要如何保留上次的滑动距离?

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next List要如何保留上次的滑动距离?

private listScroller: Scroller = new ListScroller()
List({
  scroller: this.listScroller,
}) {
  ForEach(this.vm.list, (item: Item) => {
    ListItem() {
      ItemComponent({
        name: item.name,
        icon: item.icon,
        label: item.title,
        isItemEnable: item.isEnable,
        onItemClick: item.onClick
      })
    }
  })
}
.onScrollStop(() => {
  this.setOffset(this.listScroller.currentOffset().xOffset)
})

List重新渲染的时候会清空掉上次的滑动位置, 我在onScrollStop的时候记录了当前的滑动距离,列表再次刷新的时候要如何设置才能恢复原先的滑动位置呢?


更多关于HarmonyOS 鸿蒙Next List要如何保留上次的滑动距离?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

12 回复
scrollBy(dx: Length, dy: Length);

scrollTo(...)

Offset

更多关于HarmonyOS 鸿蒙Next List要如何保留上次的滑动距离?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我现在的问题其实就是找不到一个好的时机去调用scrollTo这个方法。

@Builder buildList() {
    this.listScroller.scrollTo({ xOffset: this.getOffset()})
}

我这样调用的话会报错,

现在有组件生命周期的回调方法了,你看看文档,有个build完成后的回调,你在这里scrollTo。

你说的是onDidBuild?我试过这个,他只会在第一次build的时候回调,后续刷新list就不会调用了,

要是清空了数据,只能根据item的大小计算出位置或者是根据index的值重新滑动到之前的位置,这样的话会有一个滑动效果,就看怎么规避滑动效果,比如通过进度条遮挡之类的。

或者是试试对list增删改,而不是直接清除所有的数据重新加载。

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

List的构造方法只有一个initialIndex可以支持滑动到具体的item位置,如果要滑动到具体的位置需要用scroller的scrollTo方法吧?但是构建UI的时候不能调用方法,会报错。鸿蒙有构造UI结束后的回调可以支持这样调用吗?

Name: John Doe

Date of Birth: 1990-01-01

Contact: john.doe@example.com

Education:

  • Bachelor’s Degree in Computer Science from XYZ University (2008-2012)

Experience:

  • Software Engineer at ABC Corp (2012-2016)
  • Senior Software Engineer at DEF Corp (2016-Present)

这个方法只有组件创建的时候会调用吧?我这边是同一个组件多次刷新列表的情况,列表刷新不会回调这个方法了,

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

补充一下具体的场景:

页面有个底部菜单,有十来个item这样,然后每个菜单点击后可以展开新的菜单。

我目前是顶一个数组来记录item,点击时通过修改数组来触发重新渲染。

如果是在一级菜单滑动了一段距离后再进入子菜单,返回一级菜单的时候就没法记录上次的滑动距离了

在HarmonyOS(鸿蒙)系统中,若要实现Next List(假设是指某种列表组件或界面)保留上次的滑动距离,通常涉及到状态管理和数据持久化。以下是一个简洁的实现思路:

  1. 状态保存:在列表组件滚动时,监听滚动事件并记录当前的滚动位置(如滚动条的偏移量)。这可以通过组件提供的滚动事件监听接口实现。

  2. 数据持久化:将记录的滚动位置保存到本地存储(如SharedPreferences、SQLite数据库或文件存储等),以便在应用重启或页面重新加载时能恢复该状态。

  3. 状态恢复:在列表组件初始化时,从本地存储中读取之前保存的滚动位置,并设置列表组件的滚动位置到该值。

  4. 注意事项:确保在组件销毁或应用退出前正确保存状态,以及在组件加载或应用启动时优先恢复状态。此外,还需考虑状态恢复时的边界情况,如列表数据发生变化时滚动位置的有效性。

通过上述步骤,HarmonyOS应用中的Next List组件即可实现保留上次滑动距离的功能。如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部