diff --git a/framework/ohos/src/main/cpp/impl/renderer/native/include/renderer/components/base_view.h b/framework/ohos/src/main/cpp/impl/renderer/native/include/renderer/components/base_view.h index dba3a6ea6..8a8816419 100644 --- a/framework/ohos/src/main/cpp/impl/renderer/native/include/renderer/components/base_view.h +++ b/framework/ohos/src/main/cpp/impl/renderer/native/include/renderer/components/base_view.h @@ -195,6 +195,8 @@ protected: std::function eventTouchCancel_; std::function eventAttachedToWindow_; std::function eventDetachedFromWindow_; + + bool attachEventHasSend_ = false; bool flagInterceptPullUp_ = false; diff --git a/framework/ohos/src/main/cpp/impl/renderer/native/src/components/base_view.cc b/framework/ohos/src/main/cpp/impl/renderer/native/src/components/base_view.cc index 0760247c4..a0ab137a4 100644 --- a/framework/ohos/src/main/cpp/impl/renderer/native/src/components/base_view.cc +++ b/framework/ohos/src/main/cpp/impl/renderer/native/src/components/base_view.cc @@ -834,11 +834,12 @@ void BaseView::SetAttachedToWindowHandle(bool flag) { eventAttachedToWindow_ = [weak_view]() { auto view = weak_view.lock(); if (view) { + view->attachEventHasSend_ = true; HRGestureDispatcher::HandleAttachedToWindow(view->ctx_, view->tag_); } }; // NODE_EVENT_ON_ATTACH 事件是 insertChild 的时候触发的,所以如果已经 insert 过,需要补发事件 - if (GetLocalRootArkUINode()->HasParent()) { + if (GetLocalRootArkUINode()->HasParent() && !attachEventHasSend_) { eventAttachedToWindow_(); } } else {