!37845 【Menu】修复自定义menuItem不响应onChange

Merge pull request !37845 from 王一卉/onChange
This commit is contained in:
openharmony_ci 2024-07-16 13:37:12 +00:00 committed by Gitee
commit c317aafe99
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 26 additions and 2 deletions

View File

@ -739,12 +739,34 @@ void CustomMenuItemPattern::OnTouch(const TouchEventInfo& info)
} else if (touchType == TouchType::UP) {
auto touchUpOffset = info.GetTouches().front().GetLocalLocation();
if (lastTouchOffset_ && (touchUpOffset - *lastTouchOffset_).GetDistance() <= DEFAULT_CLICK_DISTANCE) {
if (Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE)) {
HandleOnChange();
}
CloseMenu();
}
lastTouchOffset_.reset();
}
}
void CustomMenuItemPattern::HandleOnChange()
{
auto host = GetHost();
CHECK_NULL_VOID(host);
auto hub = host->GetEventHub<MenuItemEventHub>();
CHECK_NULL_VOID(hub);
auto onChange = hub->GetOnChange();
auto selectedChangeEvent = hub->GetSelectedChangeEvent();
SetChange();
if (selectedChangeEvent) {
TAG_LOGI(AceLogTag::ACE_MENU, "trigger selectedChangeEvent");
selectedChangeEvent(IsSelected());
}
if (onChange) {
TAG_LOGI(AceLogTag::ACE_MENU, "trigger onChange");
onChange(IsSelected());
}
}
void MenuItemPattern::OnHover(bool isHover)
{
isHovered_ = isHover;

View File

@ -19,8 +19,8 @@
#include "base/memory/referenced.h"
#include "base/utils/noncopyable.h"
#include "core/components/slider/render_slider.h"
#include "core/components_ng/event/long_press_event.h"
#include "core/components_ng/base/view_abstract.h"
#include "core/components_ng/event/long_press_event.h"
#include "core/components_ng/pattern/menu/menu_item/menu_item_accessibility_property.h"
#include "core/components_ng/pattern/menu/menu_item/menu_item_event_hub.h"
#include "core/components_ng/pattern/menu/menu_item/menu_item_layout_algorithm.h"
@ -213,7 +213,8 @@ public:
{
isStackSubmenuHeader_ = true;
}
bool IsStackSubmenuHeader() {
bool IsStackSubmenuHeader()
{
return isStackSubmenuHeader_;
}
RefPtr<FrameNode> FindTouchedEmbeddedMenuItem(const OffsetF& position);
@ -324,6 +325,7 @@ public:
private:
void OnTouch(const TouchEventInfo& info) override;
void HandleOnChange();
bool OnKeyEvent(const KeyEvent& event) override;
std::unique_ptr<Offset> lastTouchOffset_;
};