HarmonyOS 鸿蒙Next tab 切换和内容区域联动实现

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

HarmonyOS 鸿蒙Next tab 切换和内容区域联动实现

使用List 方法onScrollIndex 定位索引

深色代码主题
复制
Stack() {
List({ scroller: this.classifyScroller, initialIndex: 0 }) {
// 性能知识点:此处为横向列表,列表项确定且数量较少,使用了ForEach,在列表项多的情况下,推荐使用LazyForeEach
ForEach(this.tagLists, (item: string, index: number) => {
this.tagListItemBuilder(item, index);
})
}
.onScrollIndex((start: number, end: number) => {
this.tagIndexPosition = { start, end };
})
.listDirection(Axis.Horizontal)
.scrollBar(BarState.Off)
.height(48)
.width(‘100%’)
}
.margin({top:0})

内容区域:

cke_7592.png

深色代码主题
复制
.onScrollIndex((start: number) => {
// TODO:知识点: 4.滑动二级列表触发组件滚动事件后,返回列表可视区域的第一个item对应的索引值,当前通过二级列表索引获取一级列表索引,操作一级列表Scroller对象使列表滚动到指定位置
console.log(“onScrollIndex”+start);
const currentClassIndex = start;
if (currentClassIndex !== this.currentTagIndex && this.isClickTagList !== true) {
this.currentTagIndex = currentClassIndex;
this.classifyScroller.scrollToIndex(currentClassIndex, true);
}
}).layoutWeight(1)
深色代码主题
复制
/**

  • 监听一级列表获焦索引变化 / onIndexChange() { const start = this.tagIndexPosition.start; const end = this.tagIndexPosition.end; if ((this.currentTagIndex === end || this.currentTagIndex === end - 1)) { let leftScrollCount: number = this.currentTagIndex + 1; leftScrollCount = leftScrollCount >= this.tagLists.length - 1 ? this.tagLists.length - 1 : leftScrollCount; /*
    • scrollToIndex(value: number, smooth?: boolean, align?: ScrollAlign)
    • 性能知识点:开启smooth动效时,会对经过的所有item进行加载和布局计算,当大量加载item时会导致性能问题。 */ this.classifyScroller.scrollToIndex(leftScrollCount, true); // 使获焦item向左滚动 } if (this.currentTagIndex === start || this.currentTagIndex === start + 1) { let rightScrollCount: number = this.currentTagIndex - 1; rightScrollCount = rightScrollCount <= 0 ? 0 : rightScrollCount; this.classifyScroller.scrollToIndex(rightScrollCount, true); // 使获焦item向右滚动 } }

/**

  • 根据一级列表索引值获取二级列表索引值
  • @param {number} index - 一级列表索引值
  • @returns {number} 二级列表索引值 */ findItemIndex(index: number): number { return this.records[index]; }

/**

  • 根据二级列表索引值获取对应一级列表索引
  • @param {number} index - 二级列表索引值
  • @returns {number} 一级列表索引值 */ findClassIndex(index: number): number { let ans = 0; for (let i = 0; i < this.records.length; i++) { if (index >= this.records[i] && index < this.records[i + 1]) { ans = i; return ans; } } return ans; }

效果图

cke_1098.png


更多关于HarmonyOS 鸿蒙Next tab 切换和内容区域联动实现的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next tab 切换和内容区域联动实现的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,实现Next tab切换和内容区域联动的核心在于利用系统提供的UI框架和事件处理机制。以下是实现该功能的基本步骤:

  1. Tab组件设置

    • 在布局文件中定义Tab组件,并为每个Tab项设置唯一的标识符(ID)。
    • 使用TabLayout或类似的组件来管理Tab项的显示。
  2. 内容区域设置

    • 定义与Tab项对应的内容区域,每个内容区域可以是Fragment、Page或其他自定义组件。
    • 确保内容区域与Tab项的数量一致,且能够通过标识符进行关联。
  3. 事件监听

    • 为Tab组件添加事件监听器,监听Tab项的选中事件。
    • 在事件处理函数中,根据选中的Tab项标识符,动态显示或隐藏对应的内容区域。
  4. 数据同步

    • 如果Tab项和内容区域之间有数据交互,确保在Tab切换时,数据能够正确同步。
    • 可以使用ViewModel、DataBinding等技术来管理数据状态,保证数据的一致性和响应性。
  5. 动画效果(可选):

    • 为了提升用户体验,可以在Tab切换时添加动画效果,如滑动、淡入淡出等。

通过上述步骤,你可以在HarmonyOS鸿蒙系统中实现Next tab切换和内容区域的联动。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部