mirror of
https://gitee.com/openharmony/arkui_ace_engine
synced 2025-02-25 14:05:40 +00:00
!37845 【Menu】修复自定义menuItem不响应onChange
Merge pull request !37845 from 王一卉/onChange
This commit is contained in:
commit
c317aafe99
@ -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;
|
||||
|
@ -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_;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user