!15994 修改黄区navigation崩溃的问题

Merge pull request !15994 from tengfan/branch_navigation_fix_bug_0715
This commit is contained in:
openharmony_ci 2023-07-15 08:02:55 +00:00 committed by Gitee
commit 71b66d3021
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
5 changed files with 20 additions and 19 deletions

View File

@ -597,8 +597,8 @@ void NavigationModelNG::Create()
// toolBar node
if (!navBarNode->GetToolBarNode()) {
int32_t toolBarNodeId = ElementRegister::GetInstance()->MakeUniqueId();
auto toolBarNode = ToolbarNode::GetOrCreateToolbarNode(
V2::TOOL_BAR_ETS_TAG, toolBarNodeId, []() { return AceType::MakeRefPtr<ToolbarPattern>(); });
auto toolBarNode = NavToolbarNode::GetOrCreateToolbarNode(
V2::TOOL_BAR_ETS_TAG, toolBarNodeId, []() { return AceType::MakeRefPtr<NavToolbarPattern>(); });
navBarNode->AddChild(toolBarNode);
navBarNode->SetToolBarNode(toolBarNode);
navBarNode->SetPreToolBarNode(toolBarNode);
@ -1078,7 +1078,7 @@ void NavigationModelNG::SetToolbarConfiguration(std::vector<NG::BarItem>&& toolB
if (navBarNode->GetPrevToolBarIsCustom().value_or(false)) {
navBarNode->UpdateToolBarNodeOperation(ChildNodeOperation::REPLACE);
} else {
auto toolbarNode = AceType::DynamicCast<ToolbarNode>(navBarNode->GetPreToolBarNode());
auto toolbarNode = AceType::DynamicCast<NavToolbarNode>(navBarNode->GetPreToolBarNode());
auto containerNode = toolbarNode->GetToolbarContainerNode();
if (toolbarNode && containerNode && static_cast<int32_t>(containerNode->GetChildren().size()) != 0) {
navBarNode->UpdateToolBarNodeOperation(ChildNodeOperation::REPLACE);
@ -1089,7 +1089,7 @@ void NavigationModelNG::SetToolbarConfiguration(std::vector<NG::BarItem>&& toolB
navBarNode->UpdateToolBarNodeOperation(ChildNodeOperation::ADD);
}
}
auto toolBarNode = AceType::DynamicCast<ToolbarNode>(navBarNode->GetPreToolBarNode());
auto toolBarNode = AceType::DynamicCast<NavToolbarNode>(navBarNode->GetPreToolBarNode());
CHECK_NULL_VOID(toolBarNode);
auto rowProperty = toolBarNode->GetLayoutProperty<LinearLayoutProperty>();
CHECK_NULL_VOID(rowProperty);

View File

@ -167,7 +167,7 @@ void UpdateToolbarItemSize(LayoutWrapper* layoutWrapper, NG::SizeF& toolbarItemS
void ToolbarLayoutAlgorithm::Measure(LayoutWrapper* layoutWrapper)
{
auto toolbarNode = AceType::DynamicCast<ToolbarNode>(layoutWrapper->GetHostNode());
auto toolbarNode = AceType::DynamicCast<NavToolbarNode>(layoutWrapper->GetHostNode());
CHECK_NULL_VOID(toolbarNode);
auto containerNode = toolbarNode->GetToolbarContainerNode();
auto toolbarItemNum = containerNode->GetChildren().size();

View File

@ -20,16 +20,17 @@
#include "core/components_ng/pattern/navigation/tool_bar_pattern.h"
namespace OHOS::Ace::NG {
ToolbarNode::ToolbarNode(const std::string& tag, int32_t nodeId) : FrameNode(tag, nodeId, MakeRefPtr<ToolbarPattern>())
NavToolbarNode::NavToolbarNode(const std::string& tag, int32_t nodeId)
: FrameNode(tag, nodeId, MakeRefPtr<NavToolbarPattern>())
{}
RefPtr<ToolbarNode> ToolbarNode::GetOrCreateToolbarNode(
RefPtr<NavToolbarNode> NavToolbarNode::GetOrCreateToolbarNode(
const std::string& tag, int32_t nodeId, const std::function<RefPtr<Pattern>(void)>& patternCreator)
{
auto frameNode = GetFrameNode(tag, nodeId);
CHECK_NULL_RETURN_NOLOG(!frameNode, AceType::DynamicCast<ToolbarNode>(frameNode));
CHECK_NULL_RETURN_NOLOG(!frameNode, AceType::DynamicCast<NavToolbarNode>(frameNode));
auto pattern = patternCreator ? patternCreator() : MakeRefPtr<Pattern>();
auto toolbarNode = AceType::MakeRefPtr<ToolbarNode>(tag, nodeId, pattern);
auto toolbarNode = AceType::MakeRefPtr<NavToolbarNode>(tag, nodeId, pattern);
toolbarNode->InitializePatternAndContext();
ElementRegister::GetInstance()->AddUINode(toolbarNode);
return toolbarNode;

View File

@ -20,15 +20,15 @@
#include "core/components_ng/property/property.h"
namespace OHOS::Ace::NG {
class ACE_EXPORT ToolbarNode : public FrameNode {
DECLARE_ACE_TYPE(ToolbarNode, FrameNode)
class ACE_EXPORT NavToolbarNode : public FrameNode {
DECLARE_ACE_TYPE(NavToolbarNode, FrameNode)
public:
ToolbarNode(const std::string& tag, int32_t nodeId);
ToolbarNode(const std::string& tag, int32_t nodeId, const RefPtr<Pattern>& pattern)
NavToolbarNode(const std::string& tag, int32_t nodeId);
NavToolbarNode(const std::string& tag, int32_t nodeId, const RefPtr<Pattern>& pattern)
: FrameNode(tag, nodeId, pattern)
{}
~ToolbarNode() override = default;
static RefPtr<ToolbarNode> GetOrCreateToolbarNode(
~NavToolbarNode() override = default;
static RefPtr<NavToolbarNode> GetOrCreateToolbarNode(
const std::string& tag, int32_t nodeId, const std::function<RefPtr<Pattern>(void)>& patternCreator);
bool IsAtomicNode() const override

View File

@ -23,12 +23,12 @@
#include "core/components_ng/pattern/pattern.h"
namespace OHOS::Ace::NG {
class ToolbarPattern : public LinearLayoutPattern {
DECLARE_ACE_TYPE(ToolbarPattern, LinearLayoutPattern);
class NavToolbarPattern : public LinearLayoutPattern {
DECLARE_ACE_TYPE(NavToolbarPattern, LinearLayoutPattern);
public:
ToolbarPattern() : LinearLayoutPattern(false) {};
~ToolbarPattern() override = default;
NavToolbarPattern() : LinearLayoutPattern(false) {};
~NavToolbarPattern() override = default;
RefPtr<LayoutAlgorithm> CreateLayoutAlgorithm() override
{