电子说
使用ArkTS语言,实现一个导航与内容二级联动的效果。
二级联动(ArkTS)
介绍了如何基于List组件实现一个导航和内容的二级联动效果。样例主要包含以下功能:
效果如图所示:
完成本篇Codelab我们首先要完成开发环境的搭建,本示例以RK3568开发板为例,参照以下步骤进行:
gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]本篇Codelab只对核心代码进行讲解,对于完整代码,我们会在gitee中提供。
├──entry/src/main/ets // 代码区
│ ├──common
│ │ └──constants
│ │ └──Constants.ets // 常量类
│ ├──entryability
│ │ └──EntryAbility.ts // 程序入口类
│ ├──pages
│ │ └──IndexPage.ets // 二级联动页面入口
│ ├──view
│ │ ├──ClassifyItem.ets // 课程分类组件
│ │ └──CourseItem.ets // 课程信息组件
│ └──viewmodel
│ ├──ClassifyModel.ets // 导航Model
│ ├──ClassifyViewModel.ets // 导航ViewModel
│ ├──CourseModel.ets // 课程内容Model
│ └──LinkDataModel.ets // 数据源Model
└──entry/src/main/resources // 资源文件
`HarmonyOS与OpenHarmony鸿蒙文档籽料:mau123789是v直接拿`
界面整体使用Row组件实现横向布局,分为左右两部分。均使用List组件实现对导航和内容的数据展示,导航部分固定宽度,内容部分自适应屏幕剩余宽度并用ListItemGroup完成每个导航下的内容布局。
Row() {
List({ scroller: this.classifyScroller }) {
ForEach(this.classifyList, (item: ClassifyModel, index: number) = > {
ListItem() {
ClassifyItem({
classifyName: item.classifyName,
isSelected: this.currentClassify === index,
onClickAction: () = > this.classifyChangeAction(index, true)
})
}
}, (item: ClassifyModel) = > item.classifyName + this.currentClassify)
}
List({ scroller: this.scroller }) {
ForEach(this.classifyList, (classifyItem: ClassifyModel) = > {
ListItemGroup({
header: this.ClassifyHeader(classifyItem.classifyName),
space: Constants.COURSE_ITEM_PADDING
}) {
ForEach(classifyItem.courseList, (courseItem: CourseModel) = > {
ListItem() {
CourseItem({ itemStr: JSON.stringify(courseItem) })
}
}, courseItem = > courseItem.courseId)
}
}, item = > item.classifyId)
}
.sticky(StickyStyle.Header)
.layoutWeight(1)
.edgeEffect(EdgeEffect.None)
.onScrollIndex((start: number) = > this.classifyChangeAction(start, false))
}
点击左侧导航时,右侧内容区域通过scrollToIndex方法跳转到对应的内容页面,并改变导航的选中状态。同理在滚动右侧内容的过程中,如果当前展示的ListItemGroup发生改变时,修改左侧导航的选中状态,并滚到到对应的导航item。
classifyChangeAction(index: number, isClassify: boolean) {
if (this.currentClassify !== index) {
// change the classify status
this.currentClassify = index;
if (isClassify) {
// scroll the course scroll
this.scroller.scrollToIndex(index);
} else {
// scroll the classify scroll
this.classifyScroller.scrollToIndex(index);
}
}
}
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !