mirror of
https://gitee.com/openharmony/arkui_ace_engine
synced 2024-10-07 16:33:54 +00:00
!15994 修改黄区navigation崩溃的问题
Merge pull request !15994 from tengfan/branch_navigation_fix_bug_0715
This commit is contained in:
commit
71b66d3021
@ -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);
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user