list列表适配器例子,以后用到list可参考这个例子
author罗正yun <1732036298@qq.com>
Thu, 28 Dec 2023 07:54:02 +0000 (15:54 +0800)
committer罗正yun <1732036298@qq.com>
Thu, 28 Dec 2023 07:54:02 +0000 (15:54 +0800)
13 files changed:
code/sdk/application/wearable/nativeapp/CMakeLists.txt
code/sdk/application/wearable/nativeapp/nativelauncher/include/NativeLauncher.h
code/sdk/application/wearable/nativeapp/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicListAdapter.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicListItemView.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicModel.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicView.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicListAdapter.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicListItemView.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicView.cpp [new file with mode: 0644]

index ee69243..e0ac535 100755 (executable)
@@ -153,6 +153,7 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayersPresenter.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayersModel.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayersCaseListAdapter.cpp\r
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayerListitemView.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/MainActivityView.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/ActivityWeekView.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/ActivityPresenter.cpp\r
@@ -372,6 +373,14 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/remind/src/RemindView4.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/remind/src/RemindView5.cpp\r
     \r
+    #音乐列表:测试用的\r
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/music/src/MusicPresenter.cpp\r
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/music/src/MusicModel.cpp\r
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/music/src/MusicView.cpp\r
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/music/src/MusicListAdapter.cpp\r
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/music/src/MusicListItemView.cpp\r
+    \r
+\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/displaybrightness/src/DisplayBrightnessModel.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/displaybrightness/src/DisplayBrightnessPresent.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/displaybrightness/src/DisplayBrightnessView.cpp\r
index 9b7e140..03e8f75 100755 (executable)
@@ -130,6 +130,7 @@ public:
     void InitCountDownTimeNotNullSlice(void);\r
     void InitMainStopWatchSlice(void);\r
     void InitRemindSlice(void);\r
+    void InitMusicSlice(void);\r
 private:\r
     void InitAllNativeSlices(void);\r
 \r
index 47144f3..762be18 100755 (executable)
 #include "stopwatch/include/MainStopWatchView.h"\r
 #include "remind/include/MainRemindPresenter.h"\r
 #include "remind/include/MainRemindView.h"\r
+#include "music/include/MusicPresenter.h"\r
+#include "music/include/MusicView.h"\r
 \r
 namespace OHOS {\r
 struct AppViewMapper\r
@@ -359,6 +361,7 @@ static const AppViewMapper SLICE_MAPPER[] = {
     {VIEW_COUNTDOWN_TIME_NOT_NULL,&NativeLauncher::InitCountDownTimeNotNullSlice},               //倒计时不能为0\r
     {VIEW_MAIN_STOPWATCH,&NativeLauncher::InitMainStopWatchSlice},                               //秒表主视图\r
     {VIEW_REMIND,&NativeLauncher::InitRemindSlice},                                              //提醒\r
+    {VIEW_MUSIC,&NativeLauncher::InitMusicSlice},\r
     {VIEW_UISAMPLE, &NativeLauncher::InitUISampleSlice}\r
 };\r
 \r
@@ -1387,4 +1390,13 @@ void NativeLauncher::InitRemindSlice(void)  //提醒
     }\r
     NativeAbility::GetInstance().AddSliceProxy(VIEW_REMIND, remind);\r
 }\r
+\r
+void NativeLauncher::InitMusicSlice(void)  //音乐\r
+{\r
+    SliceProxy *music = new AbilitySliceProxy<MusicView,MusicPresenter>;\r
+    if (music == nullptr) {\r
+        return;\r
+    }\r
+    NativeAbility::GetInstance().AddSliceProxy(VIEW_MUSIC, music);\r
+}\r
 }\r
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicListAdapter.h b/code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicListAdapter.h
new file mode 100644 (file)
index 0000000..fd4dd68
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef MUSIC_LIST_ADAPTER_H
+#define MUSIC_LIST_ADAPTER_H
+#include <list>
+#include <string>
+#include "components/ui_list.h"
+#include "components/abstract_adapter.h"
+#include "components/ui_label.h"
+#include "components/ui_checkbox.h"
+
+// 音乐列表的适配器
+namespace OHOS
+{
+
+    typedef struct
+    {
+        int index;
+        const char *label;    // 标签
+    } MusicListItem;
+
+    class MusicListAdapter : public AbstractAdapter
+    {
+    public:
+        explicit MusicListAdapter();
+        virtual ~MusicListAdapter();
+
+        /* *
+         * @brief Sets the UIView adapter data, which is a MusicListItem linked list.
+         *
+         * @param data Indicates the MusicListItem linked list data.
+         * @since 1.0
+         * @version 1.0
+         */
+        void SetData(std::list<MusicListItem> &data);
+
+        /* *
+         * @brief Obtains the <b>data</b> size of the UILabel adapter.
+         *
+         * @return Returns the <b>data</b> size of the UILabel adapter.
+         * @since 1.0
+         * @version 1.0
+         */
+        virtual uint16_t GetCount(void) override;
+
+        virtual UIView *GetView(UIView *inView, int16_t index) override;
+
+        virtual void AddListItem(const MusicListItem &item);
+
+        void SetItemClickListener(UIView::OnClickListener *itemclicklistener)
+        {
+            itemClickListener = itemclicklistener;
+        }
+
+    private:
+        std::list<MusicListItem> listData;
+        UIView::OnClickListener *itemClickListener{nullptr};
+    };
+}
+
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicListItemView.h b/code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicListItemView.h
new file mode 100644 (file)
index 0000000..fd51ede
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef MUSIC_LIST_ITEM_VIEW_H
+#define MUSIC_LIST_ITEM_VIEW_H
+
+#include "components/ui_label.h"
+#include "components/ui_view_group.h"
+#include "components/ui_checkbox.h"
+#include "components/ui_image_view.h"
+#include "music/include/MusicListAdapter.h"
+
+namespace OHOS
+{
+    class MusicListItemView : public UIViewGroup
+    {
+    public:
+        explicit MusicListItemView();
+        virtual ~MusicListItemView();
+        virtual void SetItemInfo(const MusicListItem itemInfo);
+        virtual void SetUpChild();
+        int GetMusicListIndex();
+
+    private:
+        MusicListItemView(const MusicListItemView &);
+        UIImageView sbackground; // 背景
+        UILabel sLabel;          // 标签
+        UICheckBox scheckbox;    // 复选框
+        MusicListItem sItemInfo = {0, nullptr};
+    };
+
+}
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicModel.h b/code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicModel.h
new file mode 100644 (file)
index 0000000..6cf6ad8
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef MUSIC_MODEL_H
+#define MUSIC_MODEL_H
+
+#include <cstdint>
+#include <map>
+#include "AppViewIDs.h"
+#include "UiConfig.h"
+#include "MusicPresenter.h"
+#include "music/include/MusicListAdapter.h"
+
+namespace OHOS
+{
+    class MusicModel
+    {
+    public:
+        static MusicModel &GetInstance(void);
+        void InitMusicListItem();
+        const MusicListItem *GetMusiclistItems() const;
+        uint8_t GetMusicListNum() const;
+        //const std::map<MusicIndex, AppViewId> &GetMusicIdToViewId() const;
+
+    private:
+        MusicModel();
+        MusicModel(const MusicModel &);
+        MusicModel &operator=(const MusicModel &);
+        virtual ~MusicModel();
+        static const uint16_t musicListMaxNum = 6;
+        MusicListItem Musics[musicListMaxNum] = {0, nullptr};
+        //std::map<int, AppViewId> MusicIdToViewId;
+        bool btConnectStatus{false};
+    };
+}
+
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicPresenter.h b/code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicPresenter.h
new file mode 100644 (file)
index 0000000..a0e3068
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef MUSIC_PRESENTER_H
+#define MUSIC_PRESENTER_H
+
+#include "Presenter.h"
+#include "MusicView.h"
+#include "music/include/MusicModel.h"
+namespace OHOS
+{
+    class MusicView;
+    class MusicModel;
+    class MusicPresenter : public Presenter<MusicView>,
+                           public UIView::OnClickListener,
+                           public UIView::OnDragListener
+    {
+    public:
+        MusicPresenter();
+        virtual ~MusicPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static MusicPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+        MusicModel *p_MusicModel{nullptr};
+    };
+} // namespace OHOS
+
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicView.h b/code/sdk/application/wearable/nativeapp/nativeui/music/include/MusicView.h
new file mode 100644 (file)
index 0000000..d8409ea
--- /dev/null
@@ -0,0 +1,40 @@
+#ifndef MUSIC_VIEW_H
+#define MUSIC_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include "components/ui_view_group.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_list.h"
+#include "music/include/MusicListAdapter.h"
+namespace OHOS
+{
+    class MusicPresenter;
+    class MusicView : public View<MusicPresenter>
+    {
+
+    public:
+        MusicView();
+        virtual ~MusicView();
+        static MusicView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void AddMusicToList(const MusicListItem &item);
+    private:
+        void InitView(void);
+        void DeInitView(void);
+        void PreLoad(void);
+
+    private:
+        UIScrollView *scrollView = nullptr;
+        UILabel *title{nullptr};
+        MusicListAdapter *p_MusicListAdapter{nullptr};
+        UIList *musicList = nullptr; // 音乐列表
+        UIView::OnDragListener *draglistener{nullptr};
+        bool viewInitStatus{false};
+    };
+} // namespace OHOS
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicListAdapter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicListAdapter.cpp
new file mode 100644 (file)
index 0000000..74fb6a9
--- /dev/null
@@ -0,0 +1,79 @@
+#include "music/include/MusicListAdapter.h"
+#include "music/include/MusicListItemView.h"
+
+namespace OHOS
+{
+    MusicListAdapter::MusicListAdapter() {}
+
+    MusicListAdapter::~MusicListAdapter()
+    {
+        listData.clear();
+    }
+
+    uint16_t MusicListAdapter::GetCount(void)
+    {
+        return listData.size();
+    }
+
+    void MusicListAdapter::SetData(std::list<MusicListItem> &data)
+    {
+        if (!listData.empty())
+        {
+            listData.clear();
+        }
+        std::list<MusicListItem>::iterator it;
+        for (it = data.begin(); it != data.end(); it++)
+        {
+            listData.push_back(*it);
+        }
+    }
+
+    /// @brief 为音乐列表的每一项创建一个视图
+    /// @param inView 一个指向已存在的视图对象的指
+    /// @param index 要创建的视图在列表中的索引l。
+    /// @return 返回该视图对象
+    UIView *MusicListAdapter::GetView(UIView *inView, int16_t index)
+    {
+        //1.先检查列表数据是否为空,若为空则返回空指针
+        if (listData.empty())
+        {
+            return nullptr;
+        }
+        //2.接着检查索引是否小于0,若小于0则返回空指针
+        if (index < 0)
+        {
+            return nullptr;
+        }
+        //3.检查是否超出列表数据大小,若超出则返回空指针
+        size_t uindex = index;
+        if (uindex >= listData.size())
+        {
+            return nullptr;
+        }
+        //4.通过迭代器访问列表中指定索引位置的元素,将其赋值给itemData变量
+        std::list<MusicListItem>::iterator it = listData.begin();
+        for (int i = 0; i < index; i++)
+        {
+            it++;
+        }
+        MusicListItem itemData = *it;
+        MusicListItemView *item = nullptr;
+        //5.根据传入的inView参数是否已经存在一个视图对象,若为空则创建一个新的MusicListItemView对象,否则将inView转换成MusicListItemView类型的指针
+        if (inView == nullptr)
+        {
+            item = new MusicListItemView();
+        }
+        else
+        {
+            item = static_cast<MusicListItemView *>(inView);
+        }
+        item->SetItemInfo(itemData);
+        item->SetOnClickListener(itemClickListener);
+        return item;
+    }
+
+    void MusicListAdapter::AddListItem(const MusicListItem &item)
+    {
+        listData.push_back(item);
+    }
+} // namespace OHOS
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicListItemView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicListItemView.cpp
new file mode 100644 (file)
index 0000000..1710d80
--- /dev/null
@@ -0,0 +1,58 @@
+#include "music/include/MusicListItemView.h"
+
+namespace OHOS
+{
+
+    MusicListItemView::MusicListItemView()
+    {
+        SetPosition(0, 0, 380, 120); // 每一首歌曲的itemview宽高要配置好,因为每一首加到list歌曲都是以这个视图为基准
+        SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+        SetStyle(STYLE_BACKGROUND_OPA, 255);
+        SetTouchable(true);
+        SetUpChild();
+        Add(&sbackground);
+        Add(&sLabel);
+        Add(&scheckbox);
+    }
+
+    MusicListItemView::~MusicListItemView()
+    {
+        Remove(&sbackground);
+        Remove(&sLabel);
+        Remove(&scheckbox);
+    }
+
+    /// @brief 设置item的信息
+    /// @param itemInfo
+    void MusicListItemView::SetItemInfo(const MusicListItem itemInfo)
+    {
+        sItemInfo = itemInfo;
+        sLabel.SetText(itemInfo.label);
+    }
+
+    /// @brief 设置每一个itemview上的组件
+    void MusicListItemView::SetUpChild()
+    {
+        sbackground.SetSrc("/user/res/SETTING_BACKGROUND.bin");
+
+        sLabel.SetPosition(115, 33, 200, 40);
+        sLabel.SetStyle(STYLE_TEXT_FONT, 30);
+        sLabel.SetStyle(STYLE_LINE_HEIGHT, 36);
+        sLabel.SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
+        sLabel.SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
+        sLabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+        scheckbox.SetPosition(280, (120 - scheckbox.GetHeight()) / 2, 50, 50);
+        scheckbox.SetViewId("checkBox");
+        scheckbox.SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+        scheckbox.SetImages("/user/res/player/playing.bin", "/user/res/player/music_delete.bin");
+    }
+
+    /// @brief 获取list歌单的中每首歌的在list的下标
+    /// @return 返回歌曲下标
+    int MusicListItemView::GetMusicListIndex()
+    {
+        return sItemInfo.index;
+    }
+
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicModel.cpp b/code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicModel.cpp
new file mode 100644 (file)
index 0000000..6951ffd
--- /dev/null
@@ -0,0 +1,34 @@
+#include "music/include/MusicModel.h"
+
+namespace OHOS
+{
+
+    MusicModel::MusicModel() {}
+
+    MusicModel::~MusicModel() {}
+
+    MusicModel &MusicModel::GetInstance()
+    {
+        static MusicModel instance;
+        return instance;
+    }
+
+    void MusicModel::InitMusicListItem()
+    {
+        Musics[0] = {0, "frist song"};
+        Musics[1] = {1, "second song"};
+        Musics[2] = {2, "third song"};
+        Musics[3] = {3, "fourth song"};
+        Musics[4] = {4, "fifth song"};
+        Musics[5] = {5, "six song"};
+    }
+
+    const MusicListItem *MusicModel::GetMusiclistItems() const
+    {
+        return Musics;
+    }
+    uint8_t MusicModel::GetMusicListNum() const
+    {
+        return musicListMaxNum;
+    }
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicPresenter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicPresenter.cpp
new file mode 100644 (file)
index 0000000..cb10582
--- /dev/null
@@ -0,0 +1,85 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+#include "music/include/MusicPresenter.h"
+#include "music/include/MusicListAdapter.h"
+#include "music/include/MusicListItemView.h"
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static MusicPresenter *g_pMusicPresenter = nullptr;
+
+    MusicPresenter::MusicPresenter()
+    {
+        p_MusicModel = &MusicModel::GetInstance();
+        g_pMusicPresenter = this;
+    }
+
+    MusicPresenter::~MusicPresenter()
+    {
+        g_pMusicPresenter = nullptr;
+    }
+
+    MusicPresenter *MusicPresenter::GetInstance()
+    {
+        return g_pMusicPresenter;
+    }
+
+    void MusicPresenter::OnStart()
+    {
+        // 初始化歌曲信息
+        p_MusicModel->InitMusicListItem();
+        Presenter<MusicView>::OnStart();
+    }
+
+    void MusicPresenter::OnPause(void)
+    {
+
+        Presenter<MusicView>::OnPause();
+    }
+
+    void MusicPresenter::OnResume(void)
+    {
+        // 把歌曲信息数据拿到存储到list中
+        if (view_ == nullptr)
+        {
+            return;
+        }
+        const MusicListItem *itemInfo = p_MusicModel->GetMusiclistItems();
+        for (int i = 0; i < p_MusicModel->GetMusicListNum(); i++)
+        {
+            view_->AddMusicToList(itemInfo[i]);
+        }
+        Presenter<MusicView>::OnResume();
+    }
+
+    void MusicPresenter::OnStop(void)
+    {
+        Presenter<MusicView>::OnStop();
+    }
+
+    bool MusicPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
+            (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+        }
+        return true;
+    }
+
+    bool MusicPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        UNUSED(event);
+        MusicListItemView *musiclistItemView = static_cast<MusicListItemView *>(&view);
+        int index = musiclistItemView->GetMusicListIndex();
+        // printf("%d\n",index);//测试点击是否有效
+        if (index >= p_MusicModel->GetMusicListNum())
+        {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SettingPresenter::OnClick is no index");
+            return false;
+        }
+        return true;
+    }
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/music/src/MusicView.cpp
new file mode 100644 (file)
index 0000000..4022e64
--- /dev/null
@@ -0,0 +1,133 @@
+#include "music/include/MusicView.h"
+#include "music/include/MusicPresenter.h"
+
+#include "UiConfig.h"
+
+namespace OHOS
+{
+
+    static MusicView *g_pMusicView{nullptr};
+
+    MusicView::MusicView()
+    {
+
+        g_pMusicView = this;
+    }
+
+    MusicView::~MusicView()
+    {
+        if (viewInitStatus == true)
+        {
+            DeInitView();
+        }
+        g_pMusicView = nullptr;
+    }
+
+    MusicView *MusicView::GetInstance()
+    {
+        return g_pMusicView;
+    }
+
+    void MusicView::InitView()
+    {
+        if (scrollView == nullptr)
+        {
+            scrollView = new UIScrollView();
+        }
+        scrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+        scrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+        scrollView->SetScrollBlankSize(20);
+        scrollView->SetReboundSize(50);
+        scrollView->SetTouchable(true);
+        scrollView->SetDraggable(true);
+        draglistener = static_cast<UIView::OnDragListener *>(MusicPresenter::GetInstance());
+        scrollView->SetOnDragListener(draglistener);
+        /* -------------------------------------------------------------------------- */
+        if (title == nullptr)
+        {
+            title = new UILabel();
+        }
+        title->SetPosition(173, 52, 120, 35);
+        title->Resize(120, 35);
+        title->SetStyle(STYLE_TEXT_FONT, 30);
+        title->SetStyle(STYLE_LINE_HEIGHT, 36);
+        title->SetText("音乐列表");
+        title->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
+        title->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
+        title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        /* -------------------------------------------------------------------------- */
+        //UIList 的适配器
+        p_MusicListAdapter = new MusicListAdapter();
+        p_MusicListAdapter->SetItemClickListener(presenter_);
+        if (musicList == nullptr)
+        {
+            musicList = new UIList();
+        }
+        musicList->SetPosition(43, 120, 380, 600);
+        musicList->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
+    }
+
+    void MusicView::DeInitView()
+    {
+        scrollView->RemoveAll();
+        delete title;
+        title = nullptr;
+
+        delete musicList;
+        musicList = nullptr;
+
+        delete scrollView;
+        scrollView = nullptr;
+
+        delete draglistener;
+        draglistener = nullptr;
+    }
+
+    void MusicView::PreLoad(void)
+    {
+        if (!viewInitStatus)
+        {
+            InitView();
+            viewInitStatus = true;
+        }
+    }
+
+    /// @brief 添加歌曲到list
+    /// @param item
+    void MusicView::AddMusicToList(const MusicListItem &item)
+    {
+        p_MusicListAdapter->AddListItem(item);
+    }
+
+    /// @brief 页面启动时需要执行的代码逻辑
+    void MusicView::OnStart()
+    {
+        PreLoad();
+    }
+
+    /// @brief 创建页面的视图。
+    void MusicView::OnSetUpView()
+    {
+        View<MusicPresenter>::OnSetUpView();
+        scrollView->Add(title);
+        scrollView->Add(musicList);
+        RootView::GetInstance()->Add(scrollView);
+        musicList->SetAdapter(p_MusicListAdapter);
+        Draw();
+    }
+
+    /// @brief 销毁页面的视图。
+    void MusicView::OnTearDownView()
+    {
+        View<MusicPresenter>::OnTearDownView();
+        return;
+    }
+
+    /// @brief 页面结束时需要执行的销毁逻辑。
+    void MusicView::OnStop()
+    {
+        View<MusicPresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
\ No newline at end of file