HarmonyOS Toggle组件按钮手动切换后组件刷新问题

消息设置有个列表,列表第一行是打开所有开关,剩余的是其他单类消息,现在在关闭或打开单类消息后,第一行总开关也要跟着打开或关闭,所有按钮都是Toggle组件,总开关是接口返回的oneKeyStatus字段控制,oneKeyStatus为1代表打开,0代表关闭,剩余开关是一个接口返回的一个字典数组,字典中有个status控制,status为1代表打开,0代表关闭,现在剩余开关都关闭后,改变oneKeyStatus值想改变按钮状态,页面没有刷新。

HarmonyOS Toggle组件按钮手动切换后组件刷新问题 -鸿蒙开发者社区

HarmonyOS Toggle组件按钮手动切换后组件刷新问题 -鸿蒙开发者社区

HarmonyOS Toggle组件按钮手动切换后组件刷新问题 -鸿蒙开发者社区

HarmonyOS Toggle组件按钮手动切换后组件刷新问题 -鸿蒙开发者社区

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

参考示例如下:

@Observed
class Test {
  message: string = ''
  status: number = 0

  constructor(message: string, status: number) {
    this.message = message
    this.status = status
  }
}

@Component
struct TestList {
  @ObjectLink test: Test
  testModelList: Test[] = []
  @Link status: number

  build() {
    Row() {
      Text(this.test.message).fontSize(20)
      Toggle({
        type: ToggleType.Switch,
        isOn: this.test.status == 1 ? true : false
      })
        .onClick(() => {
          if (this.test.status == 0) {
            this.test.status = 1
          } else {
            this.test.status = 0
          }
          let count = 0;
          for (let index = 0; index < this.testModelList.length; index++) {
            if (this.testModelList[index].status == 1) {
              count = count + 1
            }
          }
          if (count == this.testModelList.length) {
            this.status = 1
          } else if (count != this.testModelList.length) {
            this.status = 0
          }
        })
    }
  }
}

@Component
@Entry
struct Index {
  @State status: number = 0
  @State testModelList: Test[] = [new Test('第一条', 0), new Test('第二条', 0), new Test('第三条', 0)]

  build() {
    Column() {
      Row() {
        Text('所有').fontSize(20)
        Toggle({
          type: ToggleType.Switch,
          isOn: this.status == 1 ? true : false
        }).onClick(() => {
          if (this.status == 0) {
            for (let index = 0; index < this.testModelList.length; index++) {
              if (this.testModelList[index].status != 1) {
                this.testModelList[index].status = 1
              }
            }
            this.status = 1
          } else if (this.status == 1) {
            for (let index = 0; index < this.testModelList.length; index++) {
              if (this.testModelList[index].status != 0) {
                this.testModelList[index].status = 0
              }
            }
            this.status = 0
          }
        })
      }

      ForEach(this.testModelList, (test: Test, index: number) => {
        TestList({
          test: test,
          testModelList: this.testModelList,
          status: this.status
        })
      }, (test: string) => JSON.stringify(test))
    }
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 组件刷新问题
218浏览 • 1回复 待解决
HarmonyOS 组件的下拉刷新问题
652浏览 • 1回复 待解决
HarmonyOS Toggle组件onChange方法手动触发
267浏览 • 1回复 待解决
HarmonyOS 页面刷新问题
531浏览 • 1回复 待解决
HarmonyOS 列表刷新问题
810浏览 • 1回复 待解决
HarmonyOS webview刷新问题
160浏览 • 2回复 待解决
HarmonyOS Toggle的Switch值更新问题
20浏览 • 1回复 待解决
HarmonyOS 数据刷新问题
185浏览 • 1回复 待解决
HarmonyOS LazyForEach数据刷新问题
121浏览 • 1回复 待解决
HarmonyOS ForEach列表刷新问题
271浏览 • 1回复 待解决
HarmonyOS 页面数据刷新问题
143浏览 • 1回复 待解决
HarmonyOS List item 刷新问题
1009浏览 • 1回复 待解决
NativeWindowFlushBuffer接口刷新问题
2083浏览 • 1回复 待解决
HarmonyOS @Builder UI刷新问题
130浏览 • 1回复 待解决
HarmonyOS swiper数据刷新问题
149浏览 • 1回复 待解决
HarmonyOS UI不刷新问题
170浏览 • 1回复 待解决
HarmonyOS 页面跳转刷新问题
1154浏览 • 1回复 待解决
HarmonyOS UI 未刷新问题
674浏览 • 0回复 待解决
HarmonyOS使用Refresh下拉刷新问题
1090浏览 • 1回复 待解决