HarmonyOS List组件能不能从底部开始加载数据?

做聊天页面开发的时候,当进入聊天页面加载消息列表展示,这个时候消息列表多的情况下需要重底部开始显示数据,也就是最新的数据显示在最下面。

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

可以参考如下方案:

创建listScroller: ListScroller = new ListScroller(),传入至List组件中,Refresh组件onReady时,调用ListScroller的scrollToIndex滚动到最后一项,该方法中的第二个参数可控制动效,默认为false,仅支持Grid、List、WaterFlow组件。

ListScroller:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-container-list-V5#listscroller11%E5%AF%B9%E8%B1%A1%E8%AF%B4%E6%98%8E

scrollToIndex:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-container-scroll-V5#scrolltoindex

参考demo:

// xxx.ets
@Entry
@Component
struct RefreshExample {
  @State isRefreshing: boolean = false
  @State arr: String[] = ['0', '1', '2', '3', '4','5','6','7','8','9','10']
  listScroller: ListScroller = new ListScroller()

  build() {
    Column() {
      Refresh({ refreshing: $$this.isRefreshing}) {
        List({scroller: this.listScroller}) {
          ForEach(this.arr, (item: string) => {
            ListItem() {
              Text('' + item)
                .width('100%').height(100).fontSize(16)
                .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
            }
          }, (item: string) => item)
        }
        .onScrollIndex((first: number) => {
          console.info(first.toString())
        })
        .width('100%')
        .height('100%')
        .divider({strokeWidth:1,color:Color.Yellow,startMargin:10,endMargin:10})
        .scrollBar(BarState.Off)
      }
      .onAppear(() => {
        this.listScroller.scrollToIndex(
          this.arr.length - 1,
          false, //默认
          // ScrollAlign.END
        )
      })
      .onStateChange((refreshStatus: RefreshStatus) => {
        console.info('Refresh onStatueChange state is ' + refreshStatus)
      })
      .onRefreshing(() => {
        setTimeout(() => {
          this.isRefreshing = false
        }, 2000)
        console.log('onRefreshing test')
      })
      .backgroundColor(0x89CFF0)
      // .refreshOffset(64)
      // .pullToRefresh(true)
    }
  }
}

若List首次渲染时已得到渲染数据,则可以使用List的initialIndex参数:

List({
  initialIndex: this.arr.length - 1,
  scroller: this.listScroller
})
分享
微博
QQ
微信
回复
2天前
相关问题
@State能不能装饰接口
882浏览 • 1回复 待解决
HarmonyOS Camera_CaptureSession 能不能重用
465浏览 • 1回复 待解决
电脑能不能刷鸿蒙系统
16035浏览 • 14回复 待解决
华为能不能做个快捷指令?
7611浏览 • 1回复 待解决
File公有目录是不能不能创建 ?
2899浏览 • 1回复 待解决
鸿蒙左右下拉栏能不能互换?
16082浏览 • 4回复 待解决
opporeno5pro能不能装鸿蒙系统啊
9733浏览 • 1回复 待解决
荣耀30pro能不能升级鸿蒙系统
7348浏览 • 1回复 待解决
荣耀30S能不能升级鸿蒙系统
9216浏览 • 1回复 待解决
这个在哪里关闭取消,能不能关闭啊
6802浏览 • 1回复 待解决
HarmonyOS list数据加载问题
17浏览 • 1回复 待解决
两SQL语句能不能用一个SQL搞定?
2881浏览 • 1回复 待解决
升级鸿蒙系统后原来的app能不能
10656浏览 • 2回复 待解决
HarmonyOS List嵌套不能同步数据
335浏览 • 1回复 待解决