HarmonyOS 鸿蒙Next 代码为什么点击不刷新?

发布于 1周前 作者 phonegap100 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 代码为什么点击不刷新?

这段代码点击不刷新,大家能帮忙看下吗?


[@Observed](/user/Observed)
class HSItemData {
  choose: boolean = false
}

[@Observed](/user/Observed)
class HSTestDataModel {
  itemArray: Array<HSItemData> = new Array()
}

[@Component](/user/Component)
struct HSCell {
  [@ObjectLink](/user/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();
    })
  }
}
 

更多关于HarmonyOS 鸿蒙Next 代码为什么点击不刷新?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
HSCell({
itemData: item, tapEvent: () => {
item.choose = !item.choose
}
})

估计是这个function透传,把观察链弄断了。直接用each里面的吧

更多关于HarmonyOS 鸿蒙Next 代码为什么点击不刷新?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


ps:V1管理真难用,我支持用V2

HarmonyOS 鸿蒙Next 代码点击不刷新的问题可能由多种因素导致,以下是一些可能的原因及排查方向:

  1. 事件绑定问题:检查点击事件是否已正确绑定到UI元素上。确保事件处理函数已被注册且没有拼写错误。

  2. UI线程问题:鸿蒙系统要求UI更新必须在UI线程(主线程)中执行。如果点击事件触发了后台线程中的UI更新,则更新不会生效。请确保所有UI更新操作都在UI线程中执行。

  3. 数据未更新:如果点击事件触发了数据更新,但UI未刷新,可能是因为数据绑定未正确设置或数据模型未通知UI更新。检查数据绑定机制和数据通知机制是否工作正常。

  4. 组件状态问题:某些UI组件可能因状态不正确而无法响应点击事件。例如,如果组件被禁用或处于不可见状态,则点击事件将无效。

  5. 缓存问题:在某些情况下,UI组件可能因缓存而未能及时响应更新。尝试清除缓存或强制刷新UI。

  6. 系统或版本问题:检查是否使用的鸿蒙系统版本存在已知问题或Bug,导致UI更新异常。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部