HarmonyOS鸿蒙Next中列表分组可折叠和展开

HarmonyOS鸿蒙Next中列表分组可折叠和展开 在一个分组列表项目比较多的页面,想让用户可以折叠起不关心的组,减少页面占用,提高显示效率,如何实现

4 回复

参考以下示例

class BasicDataSource implements IDataSource {
private listeners: DataChangeListener[] = [];
private originDataArray: string[] = [];

public totalCount(): number {
return 0;
}

public getData(index: number): string {
return this.originDataArray[index];
}

// 该方法为框架侧调用,为LazyForEach组件向其数据源处添加listener监听
registerDataChangeListener(listener: DataChangeListener): void {
if (this.listeners.indexOf(listener) < 0) {
console.info('add listener');
this.listeners.push(listener);
}
}

// 该方法为框架侧调用,为对应的LazyForEach组件在数据源处去除listener监听
unregisterDataChangeListener(listener: DataChangeListener): void {
const pos = this.listeners.indexOf(listener);
if (pos >= 0) {
console.info('remove listener');
this.listeners.splice(pos, 1);
}
}

// 通知LazyForEach组件需要在index对应索引处添加子组件
notifyDataAdd(index: number): void {
this.listeners.forEach(listener => {
listener.onDataAdd(index);
})
}
}

class MyDataSource extends BasicDataSource {
dataArray: string[] = [];

public totalCount(): number {
return this.dataArray.length;
}

public pushData(data: string): void {
this.dataArray.push(data);
this.notifyDataAdd(this.dataArray.length - 1);
}
}
@Entry
@Component
struct Index {
private titleList: number[] = [1,2,3,4,5,6,7,8]
@State condition1: boolean = true
@State conditionList: boolean[] = [true, true, true, true, true, true, true, true]
private data: MyDataSource = new MyDataSource();

aboutToAppear() {
for (let i = 0; i <= 10; i++) {
this.data.pushData("Hello"+i)
}
}

build() {
Column() {
List({ space: 50 }) {
ForEach(this.titleList, (item: string, index: number) => {
ListItem() {
Column() {
Text("标题"+item)
.fontSize(35)
.fontColor(Color.Red)
.height('40vp')
.width("100%")
.backgroundColor(Color.Grey)
.textAlign(TextAlign.Center)
.onClick(() => {
if (this.conditionList[index]) {
this.conditionList[index] = false
} else {
this.conditionList[index] = true
}
})
if (this.conditionList[index]) {
List({ space: 10 }) {
LazyForEach(this.data, (item: string, index: number) => {
ListItem() {
Row() {
Text("内容:"+item)
.fontSize(10)
.fontColor(Color.Green)
.height('15vp')
.width("100%")
.backgroundColor(Color.Yellow)
}
}
}, (item: string) => item)
}
}
}
}
}, (item: string) => item)
}
}
}

更多关于HarmonyOS鸿蒙Next中列表分组可折叠和展开的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,列表分组的折叠和展开功能通过ListContainer组件实现。开发者可以使用ExpandableListContainer来创建可折叠和展开的列表分组。ExpandableListContainer继承自ListContainer,并提供了对分组列表的支持。

要使用此功能,首先需要定义数据源,通常是一个包含分组和子项的列表。然后创建一个适配器(Adapter),继承自ExpandableListContainer.ExpandableListAdapter,并实现必要的方法,如getGroupCountgetChildrenCountgetGroupViewgetChildView等。

在布局文件中,使用ExpandableListContainer组件,并通过setAdapter方法将适配器设置到ExpandableListContainer中。这样,列表分组就可以根据用户的操作进行折叠和展开。

默认情况下,分组是展开的,可以通过编程方式控制分组的展开和折叠状态,使用expandGroupcollapseGroup方法。此外,还可以监听分组展开和折叠的事件,通过实现ExpandableListContainer.OnGroupExpandListenerExpandableListContainer.OnGroupCollapseListener接口来处理相应的事件。

通过这种方式,开发者可以在HarmonyOS鸿蒙Next中轻松实现列表分组的折叠和展开功能,提升用户体验。

在HarmonyOS(鸿蒙)Next中,列表分组支持折叠和展开功能,主要通过List组件结合@State@Builder实现。你可以使用@State变量控制分组的展开状态,并在@Builder中动态渲染列表项。通过点击分组标题,切换@State变量的值,从而实现折叠和展开效果。这种设计提升了用户交互体验,适用于需要分类展示大量数据的场景。

回到顶部