修复训练设置距离目标死机
authorCaisking <3449750381@qq.com>
Sat, 20 Jul 2024 01:27:25 +0000 (09:27 +0800)
committerCaisking <3449750381@qq.com>
Sat, 20 Jul 2024 01:27:25 +0000 (09:27 +0800)
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetView.h
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetView.cpp

index 07dfc6a..a508bd9 100644 (file)
 #include "traing/include/TrainingSetTimeView.h"
 #include "traing/include/TrainingSetMileView.h"
 #include "traing/include/TrainingSetStepView.h"
+#include "traing/include/TraingSetPresenter.h"
 
-#include "TraingSetPresenter.h"
 namespace OHOS
 {
 #define BUTTONTIME "button1"
 #define BUTTONCALULI "button2"
 #define BUTTONDISTANCE "button3"
 #define BUTTONSTEPS "button4"
+#define MAXSLECTVIEW 5
 
     class TraingSetPresenter;
     class TrainingSetCaluliView;
@@ -78,12 +79,13 @@ namespace OHOS
         TraingSetView(TraingSetView &&) = delete;
         TraingSetView &operator=(TraingSetView &&) = delete;
 
-        UIViewGroup *container_ = nullptr;
-        UIScrollView *SetTagScrollView[4]{nullptr};
+        // UIViewGroup *container_ = nullptr;
+        UIScrollView *SetTagScrollView[MAXSLECTVIEW]{nullptr};
         TrainingSetCaluliView *setcalories{nullptr};
         TrainingSetTimeView *settime{nullptr};
         TrainingSetMileView *setmile{nullptr};
         TrainingSetStepView *setstep{nullptr};
+        UIScrollView *group{nullptr};
 
         UILabelExt *labeltitle = nullptr;
 
index 080d87e..7aae6a1 100644 (file)
@@ -30,18 +30,17 @@ namespace OHOS
 \r
     TraingSetView *TraingSetView::GetInstance()\r
     {\r
-\r
         return g_pTraingSetView;\r
     }\r
 \r
     /* InitView:初始化界面*/\r
     void TraingSetView ::InitView()\r
     {\r
-        if (SetTagScrollView[SET_VIEW] == nullptr)\r
+        if (group == nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW] = new UIScrollView();\r
-            SetTagScrollView[SET_VIEW]->SetPosition(0, 0, 466, 466);\r
-            SetTagScrollView[SET_VIEW]->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+            group = new UIScrollView();\r
+            group->SetPosition(0, 0, 466, 466);\r
+            group->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
         }\r
         //  初始化Button\r
         InitButton(butTime, 43, 120, 380, 100, BUTTONTIME);\r
@@ -54,23 +53,24 @@ namespace OHOS
         butDistance->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingSetPresenter::GetInstance()));\r
         butSteps->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingSetPresenter::GetInstance()));\r
 \r
-        SetTagScrollView[SET_VIEW]->Add(butTime);\r
-        SetTagScrollView[SET_VIEW]->Add(butKcal);\r
-        SetTagScrollView[SET_VIEW]->Add(butDistance);\r
-        SetTagScrollView[SET_VIEW]->Add(butSteps);\r
+        group->Add(butTime);\r
+        group->Add(butKcal);\r
+        group->Add(butDistance);\r
+        group->Add(butSteps);\r
         // 初始化Lable\r
         UIResourceTextId sportid = TraingModel::GetInstance()->GetSportEvent();\r
         InitLabelExt(labeltitle, 83, 50, 300, 35, "label1", sportid, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+\r
         InitLabelExt(labelTime, 100, 150, 150, 35, "label2", STR_DURATION, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
         InitLabelExt(labelKcal, 100, 270, 150, 35, "label4", STR_CALORIE, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
         InitLabelExt(labelDistance, 100, 390, 150, 35, "label3", STR_DISTANCE, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
         InitLabelExt(labelSteps, 100, 510, 150, 35, "label5", STR_STEP_NUMBER, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
 \r
-        SetTagScrollView[SET_VIEW]->Add(labeltitle);\r
-        SetTagScrollView[SET_VIEW]->Add(labelTime);\r
-        SetTagScrollView[SET_VIEW]->Add(labelKcal);\r
-        SetTagScrollView[SET_VIEW]->Add(labelDistance);\r
-        SetTagScrollView[SET_VIEW]->Add(labelSteps);\r
+        group->Add(labeltitle);\r
+        group->Add(labelTime);\r
+        group->Add(labelKcal);\r
+        group->Add(labelDistance);\r
+        group->Add(labelSteps);\r
 \r
         // 初始化Image\r
         InitImageView(imagetime, 70, 150, 100, 100, "image1", TIME_IMAGE);\r
@@ -83,155 +83,145 @@ namespace OHOS
         InitImageView(imagicon3, 380, 400, 100, 100, "image3", ICON_IMAGE);\r
         InitImageView(imagicon4, 380, 520, 100, 100, "image4", ICON_IMAGE);\r
 \r
-        SetTagScrollView[SET_VIEW]->Add(imagetime);\r
-        SetTagScrollView[SET_VIEW]->Add(imagcal);\r
-        SetTagScrollView[SET_VIEW]->Add(imagedistance);\r
-        SetTagScrollView[SET_VIEW]->Add(imagesteps);\r
+        group->Add(imagetime);\r
+        group->Add(imagcal);\r
+        group->Add(imagedistance);\r
+        group->Add(imagesteps);\r
 \r
-        SetTagScrollView[SET_VIEW]->Add(imagicon1);\r
-        SetTagScrollView[SET_VIEW]->Add(imagicon2);\r
-        SetTagScrollView[SET_VIEW]->Add(imagicon3);\r
-        SetTagScrollView[SET_VIEW]->Add(imagicon4);\r
+        group->Add(imagicon1);\r
+        group->Add(imagicon2);\r
+        group->Add(imagicon3);\r
+        group->Add(imagicon4);\r
     }\r
     /* DeInit:删除组件 */\r
     void TraingSetView::DeInit()\r
     {\r
-        SetTagScrollView[SET_VIEW]->RemoveAll();\r
+        group->RemoveAll();\r
         // 删除Label\r
         if (labeltitle != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(labeltitle);\r
+            group->Remove(labeltitle);\r
             delete labeltitle;\r
             labeltitle = nullptr;\r
         }\r
         if (labelTime != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(labelTime);\r
+            group->Remove(labelTime);\r
             delete labelTime;\r
             labelTime = nullptr;\r
         }\r
         if (labelKcal != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(labelKcal);\r
+            group->Remove(labelKcal);\r
             delete labelKcal;\r
             labelKcal = nullptr;\r
         }\r
         if (labelSteps != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(labelSteps);\r
+            group->Remove(labelSteps);\r
             delete labelSteps;\r
             labelSteps = nullptr;\r
         }\r
         if (labelDistance != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(labelDistance);\r
+            group->Remove(labelDistance);\r
             delete labelDistance;\r
             labelDistance = nullptr;\r
         }\r
         // 删除Button\r
         if (butTime != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(butTime);\r
+            group->Remove(butTime);\r
             delete butTime;\r
             butTime = nullptr;\r
         }\r
         if (butKcal != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(butKcal);\r
+            group->Remove(butKcal);\r
             delete butKcal;\r
             butKcal = nullptr;\r
         }\r
         if (butDistance != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(butDistance);\r
+            group->Remove(butDistance);\r
             delete butDistance;\r
             butDistance = nullptr;\r
         }\r
         if (butSteps != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(butSteps);\r
+            group->Remove(butSteps);\r
             delete butSteps;\r
             butSteps = nullptr;\r
         }\r
         // 删除Image\r
         if (imagetime != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(imagetime);\r
+            group->Remove(imagetime);\r
             delete imagetime;\r
             imagetime = nullptr;\r
         }\r
         if (imagcal != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(imagcal);\r
+            group->Remove(imagcal);\r
             delete imagcal;\r
             imagcal = nullptr;\r
         }\r
         if (imagedistance != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(imagedistance);\r
+            group->Remove(imagedistance);\r
             delete imagedistance;\r
             imagedistance = nullptr;\r
         }\r
         if (imagesteps != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(imagesteps);\r
+            group->Remove(imagesteps);\r
             delete imagesteps;\r
             imagesteps = nullptr;\r
         }\r
 \r
         if (imagicon1 != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(imagicon1);\r
+            group->Remove(imagicon1);\r
             delete imagicon1;\r
             imagicon1 = nullptr;\r
         }\r
         if (imagicon2 != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(imagicon2);\r
+            group->Remove(imagicon2);\r
             delete imagicon2;\r
             imagicon2 = nullptr;\r
         }\r
         if (imagicon3 != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(imagicon3);\r
+            group->Remove(imagicon3);\r
             delete imagicon3;\r
             imagicon3 = nullptr;\r
         }\r
         if (imagicon4 != nullptr)\r
         {\r
-            SetTagScrollView[SET_VIEW]->Remove(imagicon4);\r
+            group->Remove(imagicon4);\r
             delete imagicon4;\r
             imagicon4 = nullptr;\r
         }\r
 \r
-        if (setcalories != nullptr)\r
-        {\r
-            delete setcalories;\r
-            setcalories = nullptr;\r
-        }\r
-        if (settime != nullptr)\r
-        {\r
-            delete settime;\r
-            settime = nullptr;\r
-        }\r
-        if (setmile != nullptr)\r
-        {\r
-            delete setmile;\r
-            setmile = nullptr;\r
-        }\r
-        if (setstep != nullptr)\r
-        {\r
-            delete setstep;\r
-            setstep = nullptr;\r
-        }\r
+        delete group;\r
+        group = nullptr;\r
+        delete setcalories;\r
+        setcalories = nullptr;\r
+        delete settime;\r
+        settime = nullptr;\r
+        delete setmile;\r
+        setmile = nullptr;\r
+        delete setstep;\r
+        setstep = nullptr;\r
 \r
-        // 删除容器\r
-        if (SetTagScrollView[SET_VIEW] != nullptr)\r
+        // 删除数组\r
+        for (int tagnum = SET_VIEW; tagnum < MAX_SETVIEW; tagnum++)\r
         {\r
-            SetTagScrollView[SET_VIEW]->RemoveAll(); // 移除容器中的所有组件\r
-            delete SetTagScrollView[SET_VIEW];\r
-            SetTagScrollView[SET_VIEW] = nullptr;\r
+            SetTagScrollView[tagnum] = nullptr;\r
         }\r
+\r
+        g_pTraingSetView = nullptr;\r
     }\r
 \r
     // 跳转到设置选项列表\r
@@ -239,7 +229,11 @@ namespace OHOS
     {\r
         if (SetTagScrollView[thisview] == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingSetView::ChangeSetView");\r
+            if (group == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingSetView:: new container[%d] fail", thisview);\r
+                return false;\r
+            }\r
             RootView::GetInstance()->Add(SetTagScrollView[thisview]);\r
         }\r
         return true;\r
@@ -248,7 +242,7 @@ namespace OHOS
     {\r
         if (SetTagScrollView[thisview] == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingSetView::ChangeSetCaloriesView");\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingSetView::ChangeSetCaloriesView");\r
             setcalories = new TrainingSetCaluliView();\r
             if (setcalories == nullptr)\r
             {\r
@@ -258,13 +252,14 @@ namespace OHOS
             SetTagScrollView[thisview] = setcalories->SetCaluliViewInit();\r
             RootView::GetInstance()->Add(SetTagScrollView[thisview]);\r
         }\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetTagScrollView[%d] is not null", thisview);\r
         return true;\r
     }\r
     bool TraingSetView::ChangeSetDurationView(int16_t thisview)\r
     {\r
         if (SetTagScrollView[thisview] == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingSetView::ChangeSetDurationView");\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingSetView::ChangeSetDurationView");\r
             settime = new TrainingSetTimeView();\r
             if (settime == nullptr)\r
             {\r
@@ -274,13 +269,14 @@ namespace OHOS
             SetTagScrollView[thisview] = settime->SetTimeViewInit();\r
             RootView::GetInstance()->Add(SetTagScrollView[thisview]);\r
         }\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetTagScrollView[%d] is not null", thisview);\r
         return true;\r
     }\r
     bool TraingSetView::ChangeSetDistanceView(int16_t thisview)\r
     {\r
         if (SetTagScrollView[thisview] == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingSetView::ChangeSetDistanceView");\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingSetView::ChangeSetDistanceView");\r
             setmile = new TrainingSetMileView();\r
             if (setmile == nullptr)\r
             {\r
@@ -290,13 +286,14 @@ namespace OHOS
             SetTagScrollView[thisview] = setmile->SetMileViewInit();\r
             RootView::GetInstance()->Add(SetTagScrollView[thisview]);\r
         }\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetTagScrollView[%d] is not null", thisview);\r
         return true;\r
     }\r
     bool TraingSetView::ChangeSetStepsView(int16_t thisview)\r
     {\r
         if (SetTagScrollView[thisview] == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingSetView::ChangeSetDistanceView");\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingSetView::ChangeSetDistanceView");\r
             setstep = new TrainingSetStepView();\r
             if (setstep == nullptr)\r
             {\r
@@ -306,18 +303,19 @@ namespace OHOS
             SetTagScrollView[thisview] = setstep->SetStepViewInit();\r
             RootView::GetInstance()->Add(SetTagScrollView[thisview]);\r
         }\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetTagScrollView[%d] is not null", thisview);\r
         return true;\r
     }\r
     /* -------------------------------------------------------------------------- */\r
     // 1.MainStopWatchViewMapper:结构体定义了一个将视图ID映射到特定成员函数指针的映射表。\r
-    struct BloodViewMapper\r
+    struct SetViewMapper\r
     {\r
         const int16_t viewId;\r
         bool (TraingSetView::*func)(int16_t thisView);\r
     };\r
 \r
     // 2.ViewMapper[] 是一个静态的视图映射数组,将视图ID与MainStopWatchView类中的特定成员函数指针进行了绑定。\r
-    static const BloodViewMapper ViewMapper[] = {\r
+    static const SetViewMapper ViewMapper[] = {\r
         {SET_VIEW, &TraingSetView::ChangeSetView},\r
         {SET_CALORIES, &TraingSetView::ChangeSetCaloriesView},\r
         {SET_DURATION, &TraingSetView::ChangeSetDurationView},\r
@@ -329,6 +327,7 @@ namespace OHOS
     bool TraingSetView::ClickFunc(int16_t interface)\r
     {\r
         int funcSize = sizeof(ViewMapper) / sizeof(ViewMapper[SET_VIEW]);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "funcSize:%d interface:%d", funcSize, interface);\r
         for (int i = 0; i < funcSize; i++)\r
         {\r
             if (interface == ViewMapper[i].viewId)\r
@@ -347,16 +346,24 @@ namespace OHOS
     // 4.切换视图\r
     void TraingSetView::ChangeView(int16_t hideView, int16_t showView)\r
     {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "hideview:%d showview:%d", hideView, showView);\r
         if (hideView > MAX_SETVIEW)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodView:: BloodViewId Overstep ones bounds");\r
             return;\r
         }\r
-        SetTagScrollView[hideView]->SetVisible(false);\r
-        ClickFunc(showView);\r
-        SetTagScrollView[showView]->SetVisible(true);\r
-        SetCurrentViewId(showView); // 切换页面更换成目标ID\r
-        Draw();\r
+        if (ClickFunc(showView))\r
+        {\r
+            SetTagScrollView[hideView]->SetVisible(false);\r
+            if (SetTagScrollView[showView] == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "set new view %d is error!", showView);\r
+                return;\r
+            }\r
+            SetTagScrollView[showView]->SetVisible(true);\r
+            SetCurrentViewId(showView); // 切换页面更换成目标ID\r
+            Draw();\r
+        }\r
     }\r
     /* -------------------------------------------------------------------------- */\r
     void TraingSetView::PreLoad(void)\r
@@ -369,16 +376,20 @@ namespace OHOS
     }\r
     void TraingSetView::OnStart()\r
     {\r
-        SetTagScrollView[SET_VIEW] = new UIScrollView();\r
-        if (SetTagScrollView[SET_VIEW] == nullptr)\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingSetView::OnStart");\r
+        View<TraingSetPresenter>::OnStart();\r
+        BaseView::RootView(Color::Black().full);\r
+\r
+        group = new UIScrollView();\r
+        if (group == nullptr)\r
         {\r
             return;\r
         }\r
-        SetTagScrollView[SET_VIEW]->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
-        SetTagScrollView[SET_VIEW]->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
-        SetTagScrollView[SET_VIEW]->SetScrollBlankSize(50);\r
-        SetTagScrollView[SET_VIEW]->SetReboundSize(100);\r
-        SetTagScrollView[SET_VIEW]->SetDirection(1);\r
+        group->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        group->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        group->SetScrollBlankSize(50);\r
+        group->SetReboundSize(100);\r
+        group->SetDirection(1);\r
 \r
         // 创建 draglistener 实例并设置为拖动监听器\r
         UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingSetPresenter::GetInstance());\r
@@ -386,19 +397,24 @@ namespace OHOS
         {\r
             return;\r
         }\r
-        SetTagScrollView[SET_VIEW]->SetOnDragListener(draglistener);\r
-        SetTagScrollView[SET_VIEW]->SetTouchable(true);\r
-        SetTagScrollView[SET_VIEW]->SetDraggable(true);\r
+        group->SetOnDragListener(draglistener);\r
+        group->SetTouchable(true);\r
+        group->SetDraggable(true);\r
 \r
         PreLoad();\r
-        RootView::GetInstance()->Add(SetTagScrollView[SET_VIEW]);\r
-        SetCurrentViewId(SET_VIEW); // 设置当前页面ID\r
+        // RootView::GetInstance()->Add(SetTagScrollView[SET_VIEW]);\r
+        // SetCurrentViewId(SET_VIEW); // 设置当前页面ID\r
     }\r
 \r
     void TraingSetView::OnSetUpView()\r
     {\r
-\r
         View<TraingSetPresenter>::OnSetUpView();\r
+        if (group != nullptr)\r
+        {\r
+            SetTagScrollView[SET_VIEW] = group;\r
+            RootView::GetInstance()->Add(SetTagScrollView[SET_VIEW]);\r
+            SetCurrentViewId(SET_VIEW);\r
+        }\r
         Draw();\r
     }\r
 \r
@@ -412,6 +428,14 @@ namespace OHOS
     void TraingSetView::OnStop()\r
     {\r
         View<TraingSetPresenter>::OnStop();\r
+\r
+        if (container_ != nullptr)\r
+        {\r
+            container_->RemoveAll();\r
+            delete container_;\r
+            container_ = nullptr;\r
+        }\r
+        group->RemoveAll();\r
         RootView::GetInstance()->RemoveAll();\r
         return;\r
     }\r