【HarmonyOS Next开发】:ListItemGroup使用

简介: 通过使用ListItemGroup和AlphabetIndexer两种类型组件,实现带标题分类和右侧导航栏的页面

实现效果

通过使用ListItemGroup和AlphabetIndexer两种类型组件,实现带标题分类和右侧导航栏的页面

cke\_1847.png

代码片段

代码架构:

  • Models中放实体类
  • ViewModel中存放界面操作相关的类

cke\_3796.png

Models/CarItem

export class CarItem {
  /**
   * 汽车名字集合*/
  public CarNameList: string[] = [];
  /**
   * 所属类型
   * */
  public Alphabet: string = '';

  constructor(carNameList: string[], alphabet: string) {
    this.CarNameList = carNameList;
    this.Alphabet = alphabet;
  }
}

ViewModels/CarViewModel

import { CarItem } from "../Models/CarItem"

/**
 * 车辆交互类*/
export class CarViewModel {
  /**
   * 车辆详细信息集合
   * */
  public Items: CarItem[] = [];
  /**
   * 头字母集合*/
  public Alphabets: Array<string> = [];

  constructor() {
    //种子数据初始化
    this.Init();
  }

  /**
   * 初始化
   */
  public Init(): void {
    this.Items.push(new CarItem([
      "奥迪1",
      "奥迪2",
      "奥迪3",
      "奥迪4",
      "奥迪5",
      "奥迪6"
    ], "A"));

    this.Items.push(new CarItem([
      "奔驰1",
      "奔驰2",
      "奔驰3",
      "奔驰4",
      "奔驰5",
      "奔驰6",
      "奔驰7",
    ], "B"));
    this.Items.push(new CarItem([
      "凯美瑞1",
      "凯美瑞2",
      "凯美瑞3",
      "凯美瑞4",
      "凯美瑞5",
      "凯美瑞6",
      "凯美瑞7",
    ], "K"));
    this.Items.push(new CarItem([
      "玛莎拉蒂1",
      "玛莎拉蒂2",
      "玛莎拉蒂3",
      "玛莎拉蒂4",
      "玛莎拉蒂5",
      "玛莎拉蒂6",
      "玛莎拉蒂7",
    ], "M"));
    this.Alphabets.push('A');
    this.Alphabets.push('B');
    this.Alphabets.push('K');
    this.Alphabets.push('M');
  }
}

pages/Index

import { CarViewModel } from '../ViewModels/CarViewModel';
import { CarItem } from '../Models/CarItem'

@Entry
@Component
struct Index {
  /*
   *
   * 界面交互类*/
  @State CarVM: CarViewModel = new CarViewModel();
  @State SelectIndex: number = 0;
  listScroller: Scroller = new Scroller();

  /**
   * 头部控件样式
   */
  @Builder
  GroupHeader(alphabet: string) {
    Text(`${alphabet}`)
      .backgroundColor('#fff1f3f5')
      .width('100%')
      .padding(10)
  }

  build() {
    Column() {
      Stack({
        alignContent: Alignment.End
      }) {
        Column() {
          List({ scroller: this.listScroller }) {
            ForEach(this.CarVM.Items, (car: CarItem, index) => {
              ListItemGroup({
                header: this.GroupHeader(`${car.Alphabet}`)
              }) {
                ForEach(car.CarNameList, (name: string, carIndex) => {
                  ListItem() {
                    Text(`${name}`)
                      .fontSize(16)
                      .width('100%')
                      .padding(10)
                  }
                })
              }

            })
          }
          .height("100%")
          .onScrollIndex((selectIndex: number) => {
            //滑动时修改
            this.SelectIndex = selectIndex;
          })
          .sticky(StickyStyle.Header) //设置吸顶效果
        }.height('100%')

        //导航条
        AlphabetIndexer({
          arrayValue: this.CarVM.Alphabets,
          selected: this.SelectIndex
        })
          .onSelect((index) => {
            this.listScroller.scrollToIndex(index);
          })
      }
    }
    .width("100%")
    .height("100%")
  }
}
相关文章
|
23小时前
|
API
【HarmonyOS Next开发】Tabs使用封装
在写Tabs时,会使用很多个TabContent来实现不同页面的展示内容,但是如果TabContent数量很多时,会导致Tabs代码量大而且很臃肿,因此想着尝试去封装Tabs的使用,可以让界面整洁和对内容界面的解耦。 主要依托于wrapBuilder:封装全局@Builder的方法使用。需要注意从API 11 才开始支持使用
14 6
|
23小时前
|
API 容器
【HarmonyOS Next开发】Navigation使用
Navigation是路由容器组件,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。适用于模块内和跨模块的路由切换。 在页面跳转时,应该使用页面路由router,在页面内的页面跳转时,建议使用Navigation达到更好的转场动效场景。
17 8
|
23小时前
|
开发者
【HarmonyOS Next开发】用户文件访问
文件所有者为登录到该终端设备的用户,包括用户私有的图片、视频、音频、文档等。 应用对用户文件的创建、访问、删除等行为,需要提前获取用户授权,或由用户操作完成。
18 10
|
23小时前
|
存储 JSON 测试技术
【HarmonyOS Next开发】云开发-云数据库(二)
实现了云侧和端侧的云数据库创建、更新、修改等操作。这篇文章实现调用云函数对云数据库进行增删改查。
19 9
|
23小时前
|
存储 IDE JavaScript
【HarmonyOS Next开发】端云一体化初始化项目
端云一体化开发是HarmonyOS对云端开发的支持、实现端云联动。云开发服务提供了云函数、云数据库、云存储等服务,可以使开发者专注于应用的业务逻辑开发,无需关注基础设施,例如:服务器、操作系统等问题。
14 6
|
1天前
|
人工智能 文字识别 算法
|
1天前
|
安全 Java 开发者
|
1天前
|
存储 开发者 容器
|
2天前
|
人工智能 自然语言处理 算法
开箱即用的个人主页页面开发实战—基于HarmonyOS 5.0 (Next)和ArkTS的实现【HarmonyOS 5.0(Next)】
本文介绍了基于HarmonyOS 5.0(Next)和ArkTS开发的开箱即用个人主页页面。HarmonyOS 5.0(Next)采用全新“和谐美学”设计理念,通过光元素模拟、多设备无缝流转及小艺助手升级,提升用户体验。文章详细解析了使用ArkTS构建个人主页页面的代码,展示了清晰的布局层次、简洁的事件处理、状态管理和组件化开发等最佳实践。这段代码不仅实现了美观的界面设计,还提供了高效的应用导航和数据传递功能,体现了对用户体验的高度关注。
36 12
开箱即用的个人主页页面开发实战—基于HarmonyOS 5.0 (Next)和ArkTS的实现【HarmonyOS 5.0(Next)】

热门文章

最新文章