HarmonyOS 列表实现方案

需要实现列表,有很多个模块,最后精彩回顾模块是可以上拉加载更多的的,有分页的。

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

参考以下demo:

@Entry
@Component
struct ListPage {
  @State pageNumber:number = 1
  @State running:boolean = false
  @State list:number[] = []
  private swiperController: SwiperController = new SwiperController();
  scroller: Scroller = new Scroller;
  aboutToAppear(): void {
    for (let i = 1; i <= 2; i++) {
      this.list.push(i);
    }
  }
  getData(){
    let number = this.list.length + 1
    for (let i = number; i <= 2*this.pageNumber; i++) {
      this.list.push(i);
    }
    this.running = false
    console.log(this.list.length.toString())
  }

  @Builder
  ListItemBuilder(item:number){
    Row(){
      Text(item.toString())
    }
    .width('100%')
    .padding(50)
    .backgroundColor(Color.Pink)
  }
  build() {
    Scroll(this.scroller) {
      Column() {
        Column() {
          Text('直播')
            .textAlign(TextAlign.Center)
            .fontSize(20)
            .padding(10)
            .width('100%')
          Swiper(this.swiperController) {
            Text('0')
              .width('90%')
              .height(250)
              .backgroundColor(Color.Gray)
              .textAlign(TextAlign.Center)
              .fontSize(30)
            Text('1')
              .width('90%')
              .height(250)
              .backgroundColor(Color.Green)
              .textAlign(TextAlign.Center)
              .fontSize(30)
          }
          .indicator(true)
          Column() {
            Text('直播预告')
              .fontSize(20)
              .textAlign(TextAlign.Start)
              .width('100%')
              .margin({ left: '10%', top: '5%', bottom: '5%' })
            Column() {
              Text('高质量发展')
                .fontSize(20)
                .textAlign(TextAlign.Center)
            }.width('90%').height(60)
            .border({ width: 1, color: '#cccccc', radius: 10 })
          }
          Column() {
            Text('正在直播')
              .fontSize(20)
              .textAlign(TextAlign.Start)
              .width('100%')
              .margin({ left: '10%', top: '5%', bottom: '5%' })
            Column({}) {
              Column() {
              }.width('80%').height(80).backgroundColor(0xF5DEB3)

              Column() {
              }.width('80%').height(80).backgroundColor(0xD2B48C)

              Column() {
              }.width('80%').height(80).backgroundColor(0xF5DEB3)
            }.width('100%').height(300).justifyContent(FlexAlign.SpaceBetween)
          }
          Text('慢直播')
            .fontSize(20)
            .textAlign(TextAlign.Start)
            .width('100%')
            .margin({ left: '10%', top: '5%', bottom: '5%' })
          Flex({ direction: FlexDirection.Row, wrap: FlexWrap.NoWrap, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) {
            Text('1').width('45%').height(100).backgroundColor(0xF5DEB3)
            Text('2').width('45%').height(100).backgroundColor(0xF5DEB3)
          }
          .width('90%')
          Text('精彩回顾')
            .fontSize(20)
            .textAlign(TextAlign.Start)
            .width('100%')
            .margin({ left: '10%', top: '5%', bottom: '5%' })
          List({ space: 10 }) {
            ForEach(this.list, (item: number) => {
              this.ListItemBuilder(item)
            }, (item: number) => JSON.stringify(item))
          }
          .padding(20)
          .lanes(2, 10)
          .edgeEffect(EdgeEffect.Spring)
          .onReachEnd(() => {
            if (!this.running) {
              this.running = true
              this.pageNumber++
              setTimeout(() => {
                this.getData()
              }, 2000)
            }
          })
        }
        .width('100%')
        .alignItems(HorizontalAlign.Center)
      }
    }
    .width("100%").height("100%")
    .edgeEffect(EdgeEffect.Spring)
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS 效果实现方案
419浏览 • 1回复 待解决
HarmonyOS 分页列表实现方式
32浏览 • 1回复 待解决
HarmonyOS 点赞动画实现方案
49浏览 • 1回复 待解决
HarmonyOS 应用多主题实现方案
379浏览 • 1回复 待解决
HarmonyOS List瀑布流的实现方案
131浏览 • 1回复 待解决
HarmonyOS桌面小窗口实现方案
457浏览 • 1回复 待解决
HarmonyOS 怎么实现下拉分类列表
250浏览 • 1回复 待解决
HarmonyOS 列表视频全屏播放实现
426浏览 • 1回复 待解决
页面和列表嵌套滚动,实现列表吸顶
1285浏览 • 1回复 待解决
HarmonyOS 模块间解耦方案如何实现
271浏览 • 1回复 待解决
拖动实现列表重新排序
1041浏览 • 1回复 待解决
高级图表实现解决方案
691浏览 • 1回复 待解决
基于HarmonyOS实现H5离线方案有哪些?
290浏览 • 1回复 待解决
路由实现动态页面的跳转方案
1810浏览 • 1回复 待解决
瀑布流场景的推荐实现方案
1929浏览 • 1回复 待解决
HarmonyOS 实现一个自定义分类列表
295浏览 • 1回复 待解决
如何实现列表页的单选效果
2468浏览 • 0回复 待解决
如何选择图文混排的实现方案
2167浏览 • 1回复 待解决