SortedList在神马笔记中的应用

SortedList在神马笔记中的应用

一、界面的层次结构

神马笔记有5个界面用于展示笔记/文件夹内容,分别为

  1. 文件夹(相同文件夹内的笔记及子文件夹)
  2. 搜索(同一关键子的笔记及文件夹)
  3. 最近项目(最近访问的笔记,不包括文件夹)
  4. 最近删除(最近删除的笔记及文件夹)
  5. 标签(同一标签的笔记及文件夹)

笔记及文件夹在神马笔记中统一称为记录,一条记录即表示一条笔记或者一个文件夹。记录支持5种排序方式,分别为:

  1. 名称
  2. 创建日期
  3. 修改日期(仅用于最近项目)
  4. 大小
  5. 标签

基于对笔记/文件夹排序的需求,使用SortedList作为记录的容器再合适不过。我们只需要提供记录的比较结果,`SortedList即可完成排序。

二、实现效果

三、代码层次结构

首先,存在5个具体的功能界面,定义5个具体的Fragment

  1. 文件夹(FolderRecordFragment)
  2. 搜索(SearchRecordFragment)
  3. 最近项目(RecentRecordFragment)
  4. 最近删除(TrashRecordFragment)
  5. 标签(TagRecordFragment)

其次,5个具体的功能界面使用了2种不同的排序方式,为2种排序方式定义2个Fragment

  1. 名称方式(NamedRecordListFragment):名称、创建日期、大小、标签
  2. 标签方式(TabbedRecordListFragment):名称、修改日期

再来,无论何种排序方式,都需要显示笔记/文件夹的列表,定义基类的Fragment

  1. BaseRecordListFragment

最终的类层次结构为

BaseRecordListFragment

|---- NamedRecordListFragment

|    |---- FolderRecordFragment |    |    |---- TrashRecordFragment |    |---- SearchRecordFragment |    |---- TagRecordFragment |---- TabbedRecordListFragment     |---- RecentRecordFragment

其中*RecordListFragment为抽象类,不能进行实例化。

四、职责定义

  • 核心功能

    1. BaseRecordListFragment

    多级文件夹管理的核心功能类,所有记录的操作及显示均由BaseRecordListFragment来完成,其重要程度及复杂度与编辑器的核心功能类ComposeArticleFragment不相上下。

  • 排序功能

    1. NamedRecordListFragment
    2. TabbedRecordListFragment

    这2个类提供了2种不同的排序方式,Named支持4种排序方式,Tabbed支持2种排序方式,并且排序的交互方式也不相同,故而定义2个不同的Fragment来实现。

  • 具体功能

    1. FolderRecordFragment
    2. SearchRecordFragment
    3. RecentRecordFragment
    4. TrashRecordFragment
    5. TagRecordFragment

    其中,Trash继承自Folder,因为设计上Trash是一个特殊的文件夹,是Folder的一个特例,故而继承之。这5个具体的类,为BaseRecordListFragment提供具体的数据,及响应BaseRecordListFragment的操作。

五、下载地址

神马笔记最新版本:【whatsnote_lastest.apk