HarmonyOS鸿蒙Next多段混合数据展示案例

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

HarmonyOS鸿蒙Next多段混合数据展示案例 HarmonyOS Next应用开发案例(持续更新中……)

本案例完整代码,请访问:代码仓库

本案例已上架 HarmonyOS NEXT 开源组件市场,如需获取或移植该案例,可安装此插件。开发者可使用插件获取鸿蒙组件,添加到业务代码中直接编译运行。

介绍

本示例介绍了如何使用WaterFlow组件展示多列不同数据,通过设置sections属性来配置不同数据的列间距、行间距等信息。

效果图预览

效果图

使用说明

  • 向下滑动,不同的数据可以规律展示。

实现思路

本示例通过设置WaterFlow组件的sections属性,来配置不同列/不同数据的相关信息,使得多段不同列数混合布局的数据能够正常展示。

  1. 初始化不同列输的分组信息。
// 瀑布流是一列的时候,分组配置信息
private oneColumnSection: SectionOptions = {
  // 分组中FlowItem数量
  itemsCount: 1,
  // 列数
  crossCount: 1,
  // 分组的列间距
  columnsGap: 5,
  // 分组的行间距
  rowsGap: 0,
  // 分组的margin
  margin: this.sectionMargin,
  // FlowItem的高度
  onGetItemMainSizeByIndex: (index: number) => {
    // 如果是最后一个item,高度赋值200
    if (index === this.dataCount - 1) {
      return 200;
    }
    return 160;
  }
};
// 瀑布流是两列的时候,分组配置信息
private twoColumnSection: SectionOptions = {
  itemsCount: 8,
  crossCount: 2,
  columnsGap: 8,
  rowsGap: 0,
  onGetItemMainSizeByIndex: (index: number) => {
    // 瀑布流数据中最大的index是9的倍数,通过index除9的余数可以确定哪些item的高度较矮
    const newIndex = index % 9;
    // index除9的余数在以下数组中的的,高度较矮
    const longIndexArr = [1, 4, 5, 8];
    return longIndexArr.includes(newIndex) ? 155 : 256;
  }
}
  1. 按照不同列数数据的出现顺序将分组信息存放到数组中。
aboutToAppear() {
  let sectionOptions: SectionOptions[] = [];
  // 通过商品数据类型初始化瀑布流分组信息
  for (let index = 0; index < waterFlowData.length; index++) {
    const productInfo: ProductInfo = waterFlowData[index];
    if (productInfo.type === this.imageFlowItemReuseId) {
      // 仅展示图片时瀑布流是一列
      sectionOptions.push(this.oneColumnSection);
    } else if(productInfo.type === this.bottomFlowItem){
      // 瀑布流最后一个元素是一列
      sectionOptions.push(this.oneColumnSection);
    } else if (productInfo.type === this.reusableFlowItemReuseId) {
      // 图片文字混合时瀑布流是两列
      sectionOptions.push(this.twoColumnSection);
      index += (this.twoColumnSection.itemsCount - 1);
    }
  }
  this.sections.splice(0, 0, sectionOptions);
}
  1. 使用WaterFlow组件构造页面,根据id构建不同的组件。
WaterFlow({ scroller: this.scroller, sections: this.sections }) {
  LazyForEach(this.dataSource, (item: ProductInfo) => {
    FlowItem() {
      // 通过type字段区分需要展示的ux
      if (item.type === this.reusableFlowItemReuseId) {
        ReusableFlowItem({ listData: item })
          .reuseId(this.reusableFlowItemReuseId)
      } else if (item.type === this.imageFlowItemReuseId) {
        ReusableImageItem({ listData: item })
          .reuseId(this.imageFlowItemReuseId)
      } else {
        this.bottomItemInWaterFlow(item);
      }
    }
    .width($r('app.string.water_flow_item_width'))
  }, (item: ProductInfo) => JSON.stringify(item))
}

高性能知识点

  • 本示例构造子组件时,使用@Reusable标识组件,使其具有可复用的能力,减少性能消耗。

工程结构&模块类型

multicolumndisplay                                // har类型
|---/src/main/ets/components                        
    |---MultiColumnDisplayPage.ets                // 多列不同数据展示案例首页
    |---WaterFlowDataSource.ets                   // LazyForEach控制器
|---/src/main/ets/data                        
    |---ProductData.ets                            // mock数据
    |---ProductDataFormat.ets                      // 瀑布流数据结构

模块依赖

参考资料


更多关于HarmonyOS鸿蒙Next多段混合数据展示案例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

HarmonyOS鸿蒙Next的多段混合数据展示案例主要涉及如何在应用中高效展示不同类型的数据。鸿蒙Next提供了多种组件和API来支持这一需求,如ListContainer、GridContainer、PageSlider等。这些组件可以灵活组合,实现复杂的布局。

在鸿蒙Next中,数据展示通常通过ArkUI框架实现。ArkUI提供了数据绑定机制,允许开发者将数据源与UI组件进行绑定,数据变化时自动更新UI。例如,使用@State@Link等装饰器可以实现数据与UI的同步。

对于多段混合数据展示,开发者可以使用不同的布局容器来组织数据。例如,ListContainer适合展示线性数据,GridContainer适合展示网格数据,PageSlider适合展示分页数据。通过将这些容器嵌套使用,可以实现复杂的多段混合布局。

此外,鸿蒙Next还提供了丰富的动画和过渡效果,可以增强数据展示的交互体验。开发者可以通过ArkUI的动画API,为数据展示添加平滑的过渡效果。

总之,鸿蒙Next的多段混合数据展示案例展示了其强大的UI框架和数据绑定机制,开发者可以灵活运用这些工具,实现高效、美观的数据展示。

更多关于HarmonyOS鸿蒙Next多段混合数据展示案例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,多段混合数据展示可以通过ListContainerRecyclerView等组件实现。首先,定义不同类型的数据模型,如使用BaseItemProvider适配多种Item类型。然后,在onBindViewHolder中根据数据类型动态绑定布局。例如,文本数据绑定Text组件,图片数据绑定Image组件,视频数据绑定Video组件。最后,通过LayoutManager实现流式布局或网格布局,确保不同数据段展示流畅。这种方法能够高效处理复杂数据混合展示场景。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!