使用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
相关问题
ListItemGroup能跟LazyForEach搭配使用
442浏览 • 1回复 待解决
ListItemGroup 和lazyforeach如何结合使用
202浏览 • 1回复 待解决
ListItemGroup 和Lazyforeach结合场景
416浏览 • 1回复 待解决
首页LazyForEach predict耗时久分析
381浏览 • 1回复 待解决
使用LazyForEach懒加载列表相关问题
377浏览 • 1回复 待解决
LazyForEach懒加载的原理是什么
924浏览 • 1回复 待解决
嵌套ForEach不能自动适应高度
339浏览 • 1回复 待解决
LazyForEach如何添加数据?
768浏览 • 1回复 待解决
使用TextPicker控件显示异常的问题
391浏览 • 1回复 待解决
lazyforeach替换数据源解决方案
200浏览 • 1回复 待解决
import Sample 里异常显示
5134浏览 • 1回复 待解决
@Builder使用引用时异常
460浏览 • 1回复 待解决
如何获取UI组件的显示隐藏状态
757浏览 • 1回复 待解决