From a330cf9cc53bdac1758f63aa8fb81687ed07f5ab Mon Sep 17 00:00:00 2001 From: shihongjie Date: Thu, 11 Apr 2024 21:31:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dlistitemgroup=E4=B8=AD?= =?UTF-8?q?=E7=9A=84listitem=E6=94=B6=E8=B5=B7=E5=BC=82=E5=B8=B8=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: shihongjie Change-Id: Icd0ddac680018438ca57b82678a02d2b7b858ee4 --- .../list/list_item_group_layout_algorithm.cpp | 2 ++ .../pattern/list/list_item_pattern.cpp | 25 +++++++++++++++++-- .../pattern/list/list_item_pattern.h | 2 ++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/frameworks/core/components_ng/pattern/list/list_item_group_layout_algorithm.cpp b/frameworks/core/components_ng/pattern/list/list_item_group_layout_algorithm.cpp index 278eb177c14..43c00eedc28 100644 --- a/frameworks/core/components_ng/pattern/list/list_item_group_layout_algorithm.cpp +++ b/frameworks/core/components_ng/pattern/list/list_item_group_layout_algorithm.cpp @@ -172,11 +172,13 @@ void ListItemGroupLayoutAlgorithm::MeasureHeaderFooter(LayoutWrapper* layoutWrap headerFooterLayoutConstraint.maxSize.SetMainSize(Infinity(), axis_); if (headerIndex_ >= 0) { auto headerWrapper = layoutWrapper->GetOrCreateChildByIndex(headerIndex_); + CHECK_NULL_VOID(headerWrapper); headerWrapper->Measure(headerFooterLayoutConstraint); headerMainSize_ = GetMainAxisSize(headerWrapper->GetGeometryNode()->GetMarginFrameSize(), axis_); } if (footerIndex_ >= 0) { auto footerWrapper = layoutWrapper->GetOrCreateChildByIndex(footerIndex_); + CHECK_NULL_VOID(footerWrapper); footerWrapper->Measure(headerFooterLayoutConstraint); footerMainSize_ = GetMainAxisSize(footerWrapper->GetGeometryNode()->GetMarginFrameSize(), axis_); } diff --git a/frameworks/core/components_ng/pattern/list/list_item_pattern.cpp b/frameworks/core/components_ng/pattern/list/list_item_pattern.cpp index 97a776d3983..1a26cf3ef2e 100644 --- a/frameworks/core/components_ng/pattern/list/list_item_pattern.cpp +++ b/frameworks/core/components_ng/pattern/list/list_item_pattern.cpp @@ -187,6 +187,19 @@ RefPtr ListItemPattern::GetListFrameNode() const return frameNode; } +RefPtr ListItemPattern::GetParentFrameNode() const +{ + auto host = GetHost(); + CHECK_NULL_RETURN(host, nullptr); + auto parent = host->GetParent(); + RefPtr frameNode = AceType::DynamicCast(parent); + while (parent && !frameNode) { + parent = parent->GetParent(); + frameNode = AceType::DynamicCast(parent); + } + return frameNode; +} + Axis ListItemPattern::GetAxis() const { auto frameNode = GetListFrameNode(); @@ -976,8 +989,16 @@ bool ListItemPattern::ClickJudge(const PointF& localPoint) CHECK_NULL_RETURN(host, true); auto geometryNode = host->GetGeometryNode(); CHECK_NULL_RETURN(geometryNode, true); - auto offset = geometryNode->GetMarginFrameOffset(); - auto size = geometryNode->GetMarginFrameSize(); + auto offset = geometryNode->GetFrameOffset(); + if (indexInListItemGroup_ != -1) { + auto parentFrameNode = GetParentFrameNode(); + CHECK_NULL_RETURN(parentFrameNode, true); + auto parentGeometryNode = parentFrameNode->GetGeometryNode(); + CHECK_NULL_RETURN(parentGeometryNode, true); + auto parentOffset = parentGeometryNode->GetFrameOffset(); + offset = offset + parentOffset; + } + auto size = geometryNode->GetFrameSize(); auto xOffset = localPoint.GetX() - offset.GetX(); auto yOffset = localPoint.GetY() - offset.GetY(); if (GetAxis() == Axis::VERTICAL) { diff --git a/frameworks/core/components_ng/pattern/list/list_item_pattern.h b/frameworks/core/components_ng/pattern/list/list_item_pattern.h index 41b02c16a34..42b09b461d5 100644 --- a/frameworks/core/components_ng/pattern/list/list_item_pattern.h +++ b/frameworks/core/components_ng/pattern/list/list_item_pattern.h @@ -151,6 +151,8 @@ public: RefPtr GetListFrameNode() const; + RefPtr GetParentFrameNode() const; + Axis GetAxis() const; void ChangeAxis(Axis axis); -- Gitee