训练:修复“更多”列表的析构
authorCaisking <3449750381@qq.com>
Sat, 5 Oct 2024 03:58:12 +0000 (11:58 +0800)
committerCaisking <3449750381@qq.com>
Sat, 5 Oct 2024 03:58:12 +0000 (11:58 +0800)
code/sdk/application/wearable/fd230app/nativeui/traing/training_list_more/include/TraingMoreView.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_list_more/src/TraingMoreView.cpp

index 4d835f1..e89eb12 100644 (file)
@@ -4,50 +4,46 @@
 
 #include "BaseView.h"
 #include "View.h"
-#include "components/ui_view_group.h"
-#include "components/ui_scroll_view.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_label_ext.h"
 #include "components/ui_list.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_view_group.h"
 #include "traing/training_list_more/include/TraingMoreAdapter.h"
 #include "traing/training_list_more/include/TraingMoreModel.h"
-#include "components/ui_label_button_ext.h"
-#include "components/ui_label_ext.h"
-#include"ui_resource_string.h"
-
-namespace OHOS
-{
-    class TraingMorePresenter;
-    class TraingMoreModel;
-    class TraingMoreView : public View<TraingMorePresenter>, public UIViewGroup
-    {
-
-    public:
-        TraingMoreView();
-        virtual ~TraingMoreView();
-        static TraingMoreView *GetInstance(void);
-
-        void OnStart() override;
-        void OnSetUpView() override;
-        void OnTearDownView() override;
-        void OnStop() override;
-
-        UIList *GetList();
-        void AddToTraingMoreList(const TraingMoreItem &item);
-
-    private:
-        void InitView(void);
-        void DeInitView(void);
-        void PreLoad(void);
-
-    private:
-        UIScrollView *scrollView = nullptr;
-        // UILabelExt *title{nullptr};
-        TraingMoreAdapter *p_TraingMoreListAdapter{nullptr};
-        UIList *TraingMoreList = nullptr;
-        UIView::OnDragListener *draglistener{nullptr};
-
-        TraingMorePresenter *g_TraingMorePresenter{nullptr};
-        TraingMoreModel *g_TraingMoreModel{nullptr};
-        bool viewInitStatus{false};
-    };
+#include "ui_resource_string.h"
+
+namespace OHOS {
+class TraingMorePresenter;
+class TraingMoreModel;
+class TraingMoreView : public View<TraingMorePresenter>, public UIViewGroup {
+
+public:
+  TraingMoreView();
+  virtual ~TraingMoreView();
+  static TraingMoreView *GetInstance(void);
+
+  void OnStart() override;
+  void OnSetUpView() override;
+  void OnTearDownView() override;
+  void OnStop() override;
+
+  UIList *GetList();
+  void AddToTraingMoreList(const TraingMoreItem &item);
+
+private:
+  void InitView(void);
+  void InitList();
+  void InitScrollView();
+  void DeInitView(void);
+  void PreLoad(void);
+  void SetKeyActListener(void);
+
+private:
+  UIScrollView *scrollView = nullptr;
+  TraingMoreAdapter *p_TraingMoreListAdapter{nullptr};
+  UIList *TraingMoreList = nullptr;
+  bool viewInitStatus{false};
+};
 } // namespace OHOS
 #endif
\ No newline at end of file
index 81993a4..36e04b3 100644 (file)
-/***\r
- * @Author: Caisking 3449750381@qq.com\r
- * @Date: 2024-03-26 09:46:17\r
- * @LastEditors: Caisking 3449750381@qq.com\r
- * @LastEditTime: 2024-03-29 12:06:57\r
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_more/src/TraingMoreView.cpp\r
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
- */\r
 #include "traing/training_list_more/include/TraingMoreView.h"\r
-#include "traing/training_list_more/include/TraingMorePresenter.h"\r
-#include "traing/include/TraingModel.h"\r
-#include "uicomponents/UIComponents.h"\r
-#include "traing/Training_UiConfig.h"\r
-\r
+#include "UiConfig.h"\r
 #include "components/ui_label_ext.h"\r
+#include "traing/Training_UiConfig.h"\r
+#include "traing/include/TraingModel.h"\r
+#include "traing/training_list_more/include/TraingMorePresenter.h"\r
 #include "ui_resource_string.h"\r
-#include "UiConfig.h"\r
+#include "uicomponents/UIComponents.h"\r
 #include "wearable_log.h"\r
-\r
-namespace OHOS\r
-{\r
-    static constexpr uint8_t NUM_2 = 2;\r
-    static TraingMoreView *g_pTraingMoreView{nullptr};\r
-    /* --------------------------------- List --------------------------------- */\r
-    static constexpr int16_t More_LIST_POSITION_X = 43;\r
-    static constexpr int16_t More_LIST_POSITION_Y = 120;\r
-    static constexpr int16_t More_SCROLLBLANKSIZE = 35; // 设置此滚动视图的空白大小。\r
-    static constexpr int16 MAX_SCR_DIS = 1000;\r
-    static constexpr int16 LIST_POS = 20;\r
-    static constexpr int16 SNUM_2 = 2;\r
-\r
-    TraingMoreView::TraingMoreView()\r
-    {\r
-        g_pTraingMoreView = this;\r
-    }\r
-\r
-    TraingMoreView::~TraingMoreView()\r
-    {\r
-        DeInitView();\r
-        g_pTraingMoreView = nullptr;\r
-    }\r
-\r
-    TraingMoreView *TraingMoreView::GetInstance()\r
-    {\r
-        return g_pTraingMoreView;\r
-    }\r
-    /// @param item\r
-    void TraingMoreView::AddToTraingMoreList(const TraingMoreItem &item)\r
-    {\r
-        p_TraingMoreListAdapter->AddItem(item);\r
-    }\r
-    static void SetKeyActListener()\r
-    {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetKeyActListener");\r
-        // 增加按键监听\r
-        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::TraingMorePresenter::GetInstance();\r
-        RootView::GetInstance()->SetOnKeyActListener(keyactListener);\r
-    }\r
-    void TraingMoreView::InitView()\r
-    {\r
-        // 初始化 UIScrollView\r
-        if (scrollView == nullptr)\r
-        {\r
-            scrollView = new UIScrollView();\r
+#include <memory>\r
+\r
+namespace OHOS {\r
+static TraingMoreView *g_pTraingMoreView{nullptr};\r
+\r
+TraingMoreView::TraingMoreView() { g_pTraingMoreView = this; }\r
+\r
+TraingMoreView::~TraingMoreView() { g_pTraingMoreView = nullptr; }\r
+\r
+TraingMoreView *TraingMoreView::GetInstance() { return g_pTraingMoreView; }\r
+\r
+void TraingMoreView::AddToTraingMoreList(const TraingMoreItem &item) {\r
+  if (p_TraingMoreListAdapter) {\r
+    p_TraingMoreListAdapter->AddItem(item);\r
+  }\r
+}\r
+\r
+void TraingMoreView::SetKeyActListener() {\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetKeyActListener");\r
+  auto keyActListener = static_cast<RootView::OnKeyActListener *>(\r
+      TraingMorePresenter::GetInstance());\r
+  RootView::GetInstance()->SetOnKeyActListener(keyActListener);\r
+}\r
+\r
+void TraingMoreView::InitScrollView() {\r
+  if (scrollView == nullptr) {\r
+    scrollView = new UIScrollView();\r
+  }\r
+  scrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(),\r
+                          Screen::GetInstance().GetHeight());\r
+  scrollView->SetTouchable(true);\r
+  scrollView->SetDraggable(true);\r
+  scrollView->SetDirection(1);\r
+  scrollView->SetHorizontalScrollState(false);\r
+  scrollView->SetOnDragListener(presenter_);\r
+  scrollView->SetYScrollBarVisible(true);\r
+}\r
+\r
+void TraingMoreView::InitList() {\r
+  if (p_TraingMoreListAdapter == nullptr) {\r
+    p_TraingMoreListAdapter = new TraingMoreAdapter();\r
+  }\r
+  p_TraingMoreListAdapter->SetItemClickListener(presenter_);\r
+\r
+  if (TraingMoreList == nullptr) {\r
+    TraingMoreList = new UIList();\r
+  }\r
+  TraingMoreList->SetPosition(43, 0, HORIZONTAL_RESOLUTION,\r
+                              VERTICAL_RESOLUTION);\r
+  TraingMoreList->SetThrowDrag(true);\r
+  TraingMoreList->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);\r
+  TraingMoreList->SetMaxScrollDistance(1000);\r
+  TraingMoreList->SetSwipeACCLevel(800);\r
+  TraingMoreList->SetDragACCLevel(5);\r
+  TraingMoreList->SetRotateFactor(1);\r
+  TraingMoreList->RequestFocus();\r
+}\r
+\r
+void TraingMoreView::InitView() {\r
+  InitScrollView();\r
+  InitList();\r
+  SetKeyActListener();\r
+}\r
+\r
+void TraingMoreView::DeInitView() {\r
+  if (viewInitStatus) {\r
+    if (container_) {\r
+      container_->RemoveAll();\r
+      if (scrollView) {\r
+        scrollView->RemoveAll();\r
+        if (p_TraingMoreListAdapter) {\r
+          delete p_TraingMoreListAdapter;\r
+          p_TraingMoreListAdapter = nullptr;\r
         }\r
-\r
-        // 设置 UIScrollView 属性\r
-        scrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
-        scrollView->SetTouchable(true);\r
-        scrollView->SetDraggable(true);\r
-        scrollView->SetDirection(1);\r
-        // scrollView->SetReboundSize(50); // 设置空白大小\r
-        // scrollView->SetScrollBlankSize(75);\r
-        scrollView->SetHorizontalScrollState(false); // 设置横向不可滑动\r
-\r
-        // 设置拖动监听器\r
-        scrollView->SetOnDragListener(presenter_);\r
-\r
-        // 初始化 label\r
-        // InitLabelExt(title, 125, 52, 200, 60, "label1", STR_TRAINING, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        // scrollView->Add(title);\r
-\r
-        // 初始化适配器\r
-        p_TraingMoreListAdapter = new TraingMoreAdapter();\r
-        p_TraingMoreListAdapter->SetItemClickListener(presenter_);\r
-\r
-        // 初始化 UIList\r
-        if (TraingMoreList == nullptr)\r
-        {\r
-            TraingMoreList = new UIList();\r
+        if (TraingMoreList) {\r
+          delete TraingMoreList;\r
+          TraingMoreList = nullptr;\r
         }\r
-\r
-        TraingMoreList->SetPosition(More_LIST_POSITION_X, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);\r
-        TraingMoreList->SetThrowDrag(true);\r
-        TraingMoreList->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);\r
-        TraingMoreList->SetMaxScrollDistance(1000);\r
-        TraingMoreList->SetSwipeACCLevel(800);\r
-        TraingMoreList->SetDragACCLevel(5);\r
-\r
-        // 设置滚动条可见性\r
-        scrollView->SetYScrollBarVisible(true);\r
-\r
-        // 增加表冠控制\r
-        TraingMoreList->SetRotateFactor(1);\r
-        TraingMoreList->RequestFocus();\r
-\r
-        // 设置键盘事件监听\r
-        SetKeyActListener();\r
-    }\r
-    UIList *TraingMoreView::GetList()\r
-    {\r
-        return TraingMoreList;\r
-    }\r
-    void TraingMoreView::DeInitView()\r
-    {\r
-        // scrollView-> RemoveAll();\r
-        scrollView->RemoveAll();\r
-        // delete title;\r
-        // title = nullptr;\r
-\r
-        TraingMoreList->RemoveAll();\r
-        delete TraingMoreList;\r
-        TraingMoreList = nullptr;\r
-\r
         delete scrollView;\r
         scrollView = nullptr;\r
-\r
-        delete draglistener;\r
-        draglistener = nullptr;\r
+      }\r
     }\r
-\r
-    void TraingMoreView::PreLoad(void)\r
-    {\r
-        if (!viewInitStatus)\r
-        {\r
-            InitView();\r
-            viewInitStatus = true;\r
-        }\r
-    }\r
-\r
-    /// @brief 页面启动时需要执行的代码逻辑\r
-    void TraingMoreView::OnStart()\r
-    {\r
-        View<TraingMorePresenter>::OnStart();\r
-        BaseView::RootView(Color::Black().full);\r
-        PreLoad();\r
-    }\r
-\r
-    /// @brief 创建页面的视图。\r
-    void TraingMoreView::OnSetUpView()\r
-    {\r
-        View<TraingMorePresenter>::OnSetUpView();\r
-        scrollView->Add(TraingMoreList);\r
-        scrollView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);\r
-        RootView::GetInstance()->Add(scrollView);\r
-        TraingMoreList->SetAdapter(p_TraingMoreListAdapter);\r
-        // TraingMoreList->SetIntercept(true);\r
-        // TraingMoreList->RefreshList(); // 刷新列表\r
-        Draw();\r
-    }\r
-\r
-    /// @brief 销毁页面的视图。\r
-    void TraingMoreView::OnTearDownView()\r
-    {\r
-        View<TraingMorePresenter>::OnTearDownView();\r
-        return;\r
-    }\r
-\r
-    /// @brief 页面结束时需要执行的销毁逻辑。\r
-    void TraingMoreView::OnStop()\r
-    {\r
-        View<TraingMorePresenter>::OnStop();\r
-\r
-        RootView::GetInstance()->ClearOnKeyActListener();\r
-        // FocusManager::GetInstance()->ClearFocus();\r
-        RootView::GetInstance()->RemoveAll();\r
-        // RootView::GetInstance()->ClearFocus();\r
-        return;\r
+    delete container_;\r
+    container_ = nullptr;\r
+  }\r
+}\r
+\r
+void TraingMoreView::PreLoad() {\r
+  if (!viewInitStatus) {\r
+    InitView();\r
+    viewInitStatus = true;\r
+  }\r
+}\r
+\r
+void TraingMoreView::OnStart() {\r
+  View<TraingMorePresenter>::OnStart();\r
+  SetContainerView(new UIViewGroup());\r
+  container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(),\r
+                          Screen::GetInstance().GetHeight());\r
+  BaseView::RootView(Color::Black().full);\r
+  PreLoad();\r
+  SetContainerView(container_);\r
+}\r
+\r
+void TraingMoreView::OnSetUpView() {\r
+  View<TraingMorePresenter>::OnSetUpView();\r
+  if (scrollView && TraingMoreList) {\r
+    scrollView->Add(TraingMoreList);\r
+    scrollView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);\r
+    container_->Add(scrollView);\r
+    if (p_TraingMoreListAdapter) {\r
+      TraingMoreList->SetAdapter(p_TraingMoreListAdapter);\r
     }\r
-}
\ No newline at end of file
+    Draw();\r
+  }\r
+}\r
+\r
+void TraingMoreView::OnTearDownView() {\r
+  View<TraingMorePresenter>::OnTearDownView();\r
+}\r
+\r
+void TraingMoreView::OnStop() {\r
+  View<TraingMorePresenter>::OnStop();\r
+  RootView::GetInstance()->ClearOnKeyActListener();\r
+  DeInitView();\r
+  RootView::GetInstance()->RemoveAll();\r
+}\r
+} // namespace OHOS
\ No newline at end of file