HarmonyOS 下面demo为什么点击不刷新?

@Observed 
class HSItemData{ 
  choose:boolean = false 
} 
@Observed 
class HSTestDataModel{ 
  itemArray:Array<HSItemData> = new Array() 
} 
 
@Component 
struct HSCell{ 
  @ObjectLink itemData:HSItemData 
  tapEvent?:(itemData:HSItemData)=>void 
  build() { 
    Row(){ 
      if (this.itemData.choose){ 
        Text("选中") 
      } 
      else { 
        Text("未选中") 
      } 
    } 
    .onClick(()=>{ 
      if (this.tapEvent){ 
        this.tapEvent(this.itemData) 
      } 
    }) 
    .height(68) 
  } 
} 
@Entry({ routeName: 'HSTestPage' }) 
@Component 
export struct HSTestPage { 
  listeners: DataChangeListener[] = [] 
  @State dataModel :HSTestDataModel  = new HSTestDataModel() 
  aboutToAppear(): void { 
    for (let i = 0; i < 10;i ++){ 
      this.dataModel.itemArray.push(new HSItemData()) 
    } 
  } 
  build() { 
    Column(){ 
      List(){ 
        LazyForEach(this,(item: HSItemData, index)=>{ 
          HSCell({itemData:item,tapEvent:(item)=>{ 
            item.choose = !item.choose 
          }}) 
        }) 
      } 
    } 
    .height("100%") 
  } 
  totalCount() { 
    return this.dataModel.itemArray.length 
  } 
  getData(index: number) { 
    return this.dataModel.itemArray[index] 
  } 
  registerDataChangeListener(listener: DataChangeListener) { 
    if (this.listeners.indexOf(listener) < 0) { 
      this.listeners.push(listener); 
    } 
  } 
  unregisterDataChangeListener(listener: DataChangeListener) { 
    const pos = this.listeners.indexOf(listener); 
    if (pos >= 0) { 
      this.listeners.splice(pos, 1); 
    } 
  } 
  //刷新页面 
  reloadTableView(): void { 
    this.listeners.forEach(listener => { 
      listener.onDataReloaded(); 
    }) 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.

上述demo为什么点击不刷新?

HarmonyOS
2024-09-03 10:32:35
1096浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
zxjiu

您可参考以下代码:

@Observed 
class HSItemData{ 
  choose:boolean = false 
} 
@Observed 
class HSTestDataModel{ 
  itemArray:Array<HSItemData> = new Array() 
} 
 
@Component 
struct HSCell{ 
  @ObjectLink itemData:HSItemData 
  tapEvent?:(itemData:HSItemData)=>void 
  build() { 
    Row(){ 
      if (this.itemData.choose){ 
        Text("选中") 
      } 
      else { 
        Text("未选中") 
      } 
    } 
    // .onClick(()=>{ 
    //   if (this.tapEvent){ 
    //     this.tapEvent(this.itemData) 
    //   } 
    // }) 
    .height(68) 
  } 
} 
 
@Entry({ routeName: 'HSTestPage' }) 
@Component 
export struct HSTestPage { 
  listeners: DataChangeListener[] = [] 
  @State dataModel :HSTestDataModel = new HSTestDataModel() 
  aboutToAppear(): void { 
    for (let i = 0; i < 10;i ++){ 
      this.dataModel.itemArray.push(new HSItemData()) 
    } 
  } 
  build() { 
    Column(){ 
      List(){ 
        LazyForEach(this,(item: HSItemData, index)=>{ 
          HSCell({itemData:item,tapEvent:(item)=>{ 
            // item.choose = !item.choose 
            // console.log(item.choose.toString()) 
          }}).onClick(()=> { 
            item.choose = !item.choose 
          }) 
        }, (item: string) => item.toString()) 
      } 
    }.height("100%") 
  } 
  totalCount() { 
    return this.dataModel.itemArray.length 
  } 
  getData(index: number) { 
    return this.dataModel.itemArray[index] 
  } 
  registerDataChangeListener(listener: DataChangeListener) { 
    if (this.listeners.indexOf(listener) < 0) { 
      this.listeners.push(listener); 
    } 
  } 
  unregisterDataChangeListener(listener: DataChangeListener) { 
    const pos = this.listeners.indexOf(listener); 
    if (pos >= 0) { 
      this.listeners.splice(pos, 1); 
    } 
  } 
  //刷新页面 
  reloadTableView(): void { 
    this.listeners.forEach(listener => { 
      listener.onDataReloaded(); 
    }) 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
分享
微博
QQ
微信
回复
2024-09-03 15:41:41


相关问题
HarmonyOS 为什么calc生效呢
844浏览 • 1回复 待解决
Left、Top为什么生效?
1654浏览 • 1回复 待解决
HarmonyOS 为什么demo启动自动打开设置
458浏览 • 1回复 待解决
为什么数组下标越界闪退?
255浏览 • 0回复 待解决
Span设置backGroundColor生效是为什么
1193浏览 • 1回复 待解决
HarmonyOS UI刷新
785浏览 • 1回复 待解决
HarmonyOS使用@ObjectLink 数据刷新
1402浏览 • 2回复 待解决
HarmonyOS 卡片更新图片刷新
826浏览 • 1回复 待解决
HarmonyOS LIst组件UI刷新
547浏览 • 1回复 待解决
HarmonyOS UI刷新问题
768浏览 • 1回复 待解决
HarmonyOS 更新数据后UI刷新
987浏览 • 1回复 待解决
HarmonyOS 新建demo卡片服务生效
938浏览 • 1回复 待解决
IF条件变化后UI刷新
1377浏览 • 1回复 待解决