HarmonyOS 选项卡组件

HarmonyOS 选项卡组件  -鸿蒙开发者社区

需要实现如图红框的组件,切换选项刷新列表,目前使用的Scroll组件,每个切换按钮用Button实现,发现Button组件没有设置选中状态的属性,点击按钮的时候前一个选中的选项要改为未选中状态,选项个数未知,是否有更好的方案?

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

参考示例如下:

@Entry
@Component
struct CustomTabPage {
  @State dataStrings: string[] =
    ['我的评论', '与我相关', '个人中心1', '个人中心2', '个人中心3', '我的发布', '设置', '退出登录'];
  private scroller: Scroller = new Scroller();
  private tabs: string[] =
    ['我的评论', '与我相关', '个人中心1', '个人中心2', '个人中心3', '我的发布', '设置', '退出登录'];
  private tabScroller: Scroller = new Scroller();
  @State selectedIndex: number = -1

  build() {
    Column() {
      this.getTabs()
      List({ space: 20, scroller: this.scroller }) {
        ForEach(this.dataStrings, (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)
    }
    .height('100%')
    .width('100%')
  }

  @Builder
  private getTabs() {
    List({ space: 20, scroller: this.tabScroller }) {
      ForEach(this.tabs, (item: string, index: number) => {
        ListItem() {
          Text(item)
            .width(100)
            .height(40)
            .fontSize(16)
            .textAlign(TextAlign.Center)
            .backgroundColor(this.selectedIndex === index ? Color.Orange : '#eeeeee')
            .fontColor(Color.Black)
            .borderRadius(20)
        }
        .onClick(() => {
          if (this.selectedIndex === index) {
            return
          }
          this.selectedIndex = index

          this.refreshListData()
        })
      })
    }
    .backgroundColor(Color.White)
    .edgeEffect(EdgeEffect.None)
    .listDirection(Axis.Horizontal)
    .height(40)
    .scrollBar(BarState.Off)
  }

  refreshListData() {
    ///刷新数据
    if (this.selectedIndex % 2 === 1) {
      this.dataStrings.shift()
    } else if (this.selectedIndex % 2 === 0) {
      this.dataStrings.unshift('新的Tab')
    }
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
UI组件怎样条件执行选项函数?
242浏览 • 1回复 待解决
自定义组件顿,怎么办啊?
343浏览 • 1回复 待解决
HarmonyOS 没有企业正式选项
34浏览 • 1回复 待解决
HarmonyOS ActionSheet选项间距太小
32浏览 • 1回复 待解决
HarmonyOS 证识别CardRecognition
67浏览 • 1回复 待解决
HarmonyOS 证识别类问题
29浏览 • 1回复 待解决
HarmonyOS List嵌套waterflow滑动
301浏览 • 1回复 待解决
HarmonyOS选项回调失效
19浏览 • 1回复 待解决
HarmonyOS TaskPool使用首选项报错
474浏览 • 1回复 待解决
HarmonyOS 银行识别canIUse问题
27浏览 • 1回复 待解决
HarmonyOS NFC读、写场景demo?
58浏览 • 1回复 待解决
HarmonyOS 系统OCR扫描银行
22浏览 • 1回复 待解决