使用LazyForEach嵌套LazyForEach(或ForEach)显示异常。

使用LazyForEach嵌套LazyForEach(或ForEach)显示异常。

HarmonyOS
2024-06-11 20:59:08
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
morning_dxm

该场景不再支持,可以通过如下方式实现嵌套类场景:

方式1: 使用一个LazyForEach进行实现:

class MyDataSource implements IDataSource { 
 private listener: DataChangeListener 
 // 构建嵌套场景下的二维数据列表 
 private dataArray: Array<Array<number>>; 
  
 public initialize() { 
   // 初始化二维数据列表 
   this.dataArray = new Array(); 
   for (let a: number = 0; a < 5; ++a) { 
     this.dataArray[a] = new Array(); 
     for (let b: number = 0; b < 5; ++b) { 
       this.dataArray[a][b] = a * 5 + b; 
     } 
   } 
 } 
  
 public totalCount(): number { 
   return 5 * 5 
 } 
  
 public getData(index: number): any { 
   // 基于二维数组的行列计算index对应的位置及数据。 
   return this.dataArray[Math.floor(index / 5)][index % 5] 
 } 
  
 registerDataChangeListener(listener: DataChangeListener): void { 
   this.listener = listener 
 } 
  
 unregisterDataChangeListener(listener: DataChangeListener): void { 
   this.listener = undefined 
 } 
} 
  
@Entry 
@Component 
struct MyComponent { 
 private data: MyDataSource = new MyDataSource() 
  
 aboutToAppear() { 
   this.data.initialize(); 
 } 
  
 build() { 
   List({ space: 3 }) { 
     LazyForEach(this.data, (item: number) => { 
       ListItem() { 
         Row() { 
           Text(item.toString()).fontSize(20).margin({ left: 10 }) 
         }.margin({ left: 10, right: 10 }) 
       } 
     }) 
   }.width('100%').height('100%') 
 } 
}

方式2:在LazyForEach和LazyForEach嵌套中新增自定义组件进行桥接过渡:

// MyDataSource处理二维数据的行数据信息。 
class MyDataSource extends MyBaseDataSource { 
 private dataArray: Array<number> = [1, 2, 3, 4, 5]; 
  
 public totalCount(): number { 
   return 5; 
 } 
  
 public getData(index: number): any { 
   return this.dataArray[index]; 
 } 
} 
  
// ChildDataSource通过二维数据的行信息处理二维数据的列数据。 
class ChildDataSource extends MyBaseDataSource { 
 private rowNum: number; 
 private dataArray: Array<number> = [1, 2, 3, 4, 5]; 
  
 constructor(rowNum: number) { 
   this.rowNum = rowNum; 
 } 
  
 public totalCount(): number { 
   return 5; 
 } 
  
 public getData(index: number): any { 
   return this.dataArray[index] + 5 * this.rowNum; 
 } 
} 
  
@Component 
struct ChildComponent { 
 private data: ChildDataSource; 
 private rowNum: number; 
  
 aboutToAppear() { 
   this.data = new ChildDataSource(this.rowNum) 
 } 
  
 build() { 
   Column() { 
     // 基于二维数据的行信息构建列数据对应的子组件。 
     LazyForEach(this.data, (item) => { 
       Row() { 
         Text(item.toString()).fontSize(20).margin({ left: 10 }) 
       }.margin({ left: 10, right: 10 }) 
     }) 
   } 
 } 
} 
  
@Entry 
@Component 
struct MyComponent { 
 private data: MyDataSource = new MyDataSource() 
  
 build() { 
   List({ space: 3 }) { 
     LazyForEach(this.data, (item: number) => { 
       // 构建二维数据行信息对应的子组件。 
       ListItem() { 
         ChildComponent({ rowNum: item - 1 }) 
       } 
     }) 
   }.width('100%').height('100%') 
 } 
}

方式3:使用ForEach嵌套ForEach的替代

@Entry 
@Component 
struct MyComponent { 
 @State data: Array<Array<number>> = [] 
  
 aboutToAppear() { 
   // 初始化二维数据列表 
   this.data = new Array(); 
   for (let a: number = 0; a < 5; ++a) { 
     this.data[a] = new Array(); 
     for (let b: number = 0; b < 5; ++b) { 
       this.data[a][b] = a * 5 + b; 
     } 
   } 
 } 
  
 build() { 
   List({ space: 3 }) { 
     ForEach(this.data, (item: Array<number>) => { 
       // 使用ForEach嵌套结构 
       ForEach(item, (item: number) => { 
         ListItem() { 
           Row() { 
             Text(item.toString()).fontSize(20).margin({ left: 10 }) 
           }.margin({ left: 10, right: 10 }) 
         } 
       }) 
     }) 
   }.width('100%').height('100%') 
 } 
}
分享
微博
QQ
微信
回复
2024-06-12 22:52:45
相关问题
HarmonyOS lazyForeach嵌套视图问题
271浏览 • 1回复 待解决
ForEach/LazyForEach键值生成规则是怎样的
1348浏览 • 1回复 待解决
list 如何使用 lazyforeach
280浏览 • 1回复 待解决
HarmonyOS swiper + LazyForEach使用问题
313浏览 • 1回复 待解决
HarmonyOS LazyForEach
342浏览 • 1回复 待解决
ListItemGroup 和lazyforeach如何结合使用
637浏览 • 1回复 待解决
LazyForEach使用限制有哪些?
596浏览 • 1回复 待解决
使用LazyForEach懒加载列表相关问题
876浏览 • 1回复 待解决
使用List lazyForeach时,reuseId未生效
323浏览 • 1回复 待解决
ListItemGroup能跟LazyForEach搭配使用
881浏览 • 1回复 待解决
LazyForEach如何添加数据?
2006浏览 • 1回复 待解决
HarmonyOS lazyForEach相关范例
50浏览 • 1回复 待解决
HarmonyOS LazyForEach问题刷新UI问题
38浏览 • 1回复 待解决