资源下载地址:https://download.csdn.net/download/sheziqiong/85662015
资源下载地址:https://download.csdn.net/download/sheziqiong/85662015

Chapter 1 : 系统简介

设计实现一个 Android 系统下的文本笔记类 APP,要求按照 Org-mode 的方式实现纯文本任务管理。

APP 能够满足如下要求:

  • 定义任务(Item)和子任务,每一条 Item 包括定义任务状态、设置任务优先级、跟踪子任务完成情况、用复选框标记非标题类型的子任务等;

  • 同时能提供查询任务,根据关键字和时间戳过滤的功能;

  • 根据时间轴展示相关任务列表,提供全局任务文件清单和全局 TODO 任务列表;

Chapter 2 : 总体架构及功能划分

Part 1. 总体架构

Part 2. 功能划分

Part 2.1 新建ITEM

新建ITEM调用右下角fab打开EDIT ITEM页面并写入文件名和存储路径名:

选择状态和优先级:

可以对TAG进行查询,还可添加TAG并显示:

时间戳进行滚动选择,可以通过按键进行日期的快速跳转:

可以通过下面按键实现加1天,加7天,减一天,减七天操作:

Notes写入的同时可以通过点击Notes按键对写入Notes的内容进行显示以方便检查:

通过修改路径名还可创建子文件,如图红色框出页面:

最后在files中检测文件是否成功存入,如图红色框出发现文件已经成功存入:

Part 2.2 时间轴文件清单格式

时间轴文件通过获取手机系统时间判断当前日期,并显示此日期前一天和后五天涵盖一周范围内的文件内容:

Part 2.3 TODO 文件清单格式

TODO文件从所有文件夹中提取TODO状态的文件,同时按照文件进行 分类,并统计每个文件中有多少个TODOtasks,每个item显示了文件的标题以及DEADLINE:

Part 2.4 全局文件清单格式

全局文件可以显示已创建的所有文件及其最后修改时间:

可对文件名进行搜索过滤:

点进文件会显示其中的所有item,如果想要查看二级item可以点击一级item左边的expand符号进行展示:

同时可以搜索item中包含的关键字内容并进行标红显示:

Part 2.5 搜索过滤功能

搜索过滤功能仅限于TAGS的搜索过滤以及文件中,文件夹名称搜索过滤和item内容搜索过滤

  • TAGS搜索

  • 文件夹名称搜索过滤

  • item内容搜索过滤

Part 2.6 多级子目录功能

多级子目录通过点进文件会显示其中的所有item,如果想要查看二级item可以点击一级item左边的expand符号进行展示:

Part 2.7 文件存储格式

为了方便手机查询org-mode文件,将文件名后缀定义为.txt方便手机查看文件,文件在手机上存储的具体格式如下:

Chapter 3 : 关键数据结构/算法

Part 3.1 Fragment结构

采用Fragment主要还是为了配合下面导航栏的切换,根据导航的按钮切换到不同的Fragmen以实现导航的效果。此处采用监听导航栏按钮从而跳转Fragment来实现。(此处根据需求,定义了五个Fragment)

此处是定义的Fragment:

跳转Fragment实现:

getSupportFragmentManager().beginTransaction().replace(R.id.frameLayout, new XXXFragment(), null) //XXXFragment是我要跳转的Fragment类.addToBackStack(null).commit();

主页面采用的是Agenda的fragment,它将在主函数的onCreate()开始部分被设置。

Part 3.2 Agenda日程结构

3.2.1 Agenda日程界面要求

Agenda以时间轴列表按照时间顺序展示当天的任务以及日期前一天至日期后六天的总共一周时间的任务。

其中已完成、时间超过、未完成的不同任务在右边侧栏显示,每条 Item 展示图中所示相关信息包括文件名以及Item标题名。

3.2.2 Agenda日程界面结构

由于日程日期和文件信息需要后端传入,且数量不定,所以标题栏和文件信息内容栏都需要使用Listview的xml文件格式,这里使用了嵌套Listview的格式来对Agenda日程文件进行显示。嵌套Listview使用两个自定义适配器来对每个Item进行显示:

嵌套Listview的xml设计如下:

第一层xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ...><SearchView... /><ListViewandroid:id="@+id/list_agenda"android:layout_width="match_parent"android:divider="@null"android:clickable="false"android:listSelector="@android:color/transparent"android:dividerHeight="0dp"android:layout_height="wrap_content" /></LinearLayout>

其结构显示如图:

第二层xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ...><TextView... /><TextView... /><ListViewandroid:id="@+id/list_agenda_time"android:layout_width="match_parent"android:divider="@null"android:clickable="false"android:listSelector="@android:color/transparent"android:dividerHeight="0dp"android:layout_height="wrap_content" /></LinearLayout>

其结构显示及子类定义如图:

后端对子Listview的定义:

其中第一层Listview包含第二层Listview的相应实体文件

public class FirstEntity {String userName;List<SecondEntity> secondList;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public List<SecondEntity> getSecondList() {return secondList;}public void setSecondList(List<SecondEntity> secondList) {this.secondList = secondList;}
}

第二层实体文件包含需要显示的三个Item信息

public class SecondEntity {String param1;String param2;String param3;public String getParam1() {return param1;}public void setParam1(String param1) {this.param1 = param1;}public String getParam2() {return param2;}public void setParam2(String param2) {this.param2 = param2;}public String getParam3() {return param3;}public void setParam3(String param3) {this.param3 = param3;}
}

文件嵌套结构如下:

Part 3.3 TODO结构

3.3.1 TODO日程界面要求

TODO 列表要求标出所有文件中 TODO 状态的任务,每条 Item 展示的信息如图,包括Item的截止日期以及其Title名称,状态为TODO,且要求按文件进行分层并标出每个文件中有多少个TODO文件(tasks)。

3.3.2 TODO日程界面结构

TODO日程界面与Agenda类似,也运用了嵌套Listview结构类型,与Agenda共用同样的适配器和实体结构,具体解释在Agenda日程界面结构中给出,此处不加赘述。

Part 3.4 File结构

Part 3.3.1 Files界面要求

每一次操作的开始,都需要选择或创建一个文件来存储任务日志 Item 的数据,这样做 的原因主要是方便通过文件级别来对所有任务进行管理,方便文件数据的同步,例如运用云存储的方式进行不同移动端的数据管理。 **文件布局要求**:实验要求能够创建多个文件,通过对不同文件数据的读取,来整合每个文件对应时间所有的任务日志,对不同任务文件进行管理。

**单个文件内的格式要求**:全局文件清单的 Item 属性顺序必须按照状态、优先级、标题、标签、时间戳、内容的 顺序进行展示,若是 TODO 状态,则需要用不同颜色进行提示,在完成后自动添加 CLOSED 项标注完成的时间戳。(时间戳格式如上,可查询标准时间戳格式)

Part 3.3.2 Files界面结构

Files由于需要跳转因此需要定义两个Fragment, 主Fragment用来显示文件列表,此处采用ListView, 次Fragment用于显示Item的多级子任务列表。此处结合了ListView,实现了多级树的结构,并一级任务依靠展开来显示子任务。本实验只实现了两级的子目录。主Fragment XML结构显示如图:此处自定义了Item用于显示政府标题

次Fragment结构类似,但是并没有自定义List的Item,此处就不展示了。为了显示出多级子任务的效果,我们组的实验选择了展开而不是缩进,以实现一种树形的结构。我们自定义了树节点类,用于存放节点的id信息和父节点的id信息,以便于在读文件后,找到属于某个一级目录的所有子目录,对页面进行分层布局。TreePoint的定义:
public class TreePoint {private String ID;        // 7241,     //账号idprivate String NNAME; // "节点内容",    //内容private String PARENTID;   // 0,       //父id     0表示父节点private String ISLEAF;     //0,        //是否是叶子节点   1为叶子节点private int DISPLAY_ORDER; // 1        //同一个级别的显示顺序private int ChildNUM; //子节点数量private boolean isExpand = false;       //是否展开了private boolean isSelected = false;    //是否选中了
}

Part 3.5 EDIT ITEM结构

EDIT ITEM包含了标题栏、文件存储路径、状态、优先级、标签以及日期设置和Note设置。

  • 标题和存储路径

    标题项和文件存储路径要求为必填,任务日志数据以文本文件的形式进行存储,每一个文件都可以包含多个 Item,因此文件名属性为必填项,需要指定相应的文件来存储 Item 信息,具体的文件要求在后面提供。

    设置某一状态为必读项目(即如果为空则进行提示并结束保存任务):

    if (TextUtils.isEmpty(content_title)) {Toast.makeText(edit_item.this, "No content to add to Title", Toast.LENGTH_SHORT).show();return;
    }
    

    状态栏弹窗:

  • 优先级选项

    优先级分为 A、B、C、D 以及默认 None 五种,同样通过控件进行选择。

    优先级弹窗:

  • 标签选项

    标签可自由创建,基础要求为每次通过文本输入来定义标签。通过点击标签按钮实现标签的选择,同时也可以使用搜索界面来对已有标签进行搜索。结合Searchview控件和Listview控件嵌套使用来实现tags的搜索功能。

    Searchview控件和Listview控件结合并调用Java自带适配器进行搜索:

    final ArrayAdapter adapter = new ArrayAdapter(edit_item.this, android.R.layout.select_dialog_item, words);
    mListView.setAdapter(adapter);
    //true表示listview获得当前焦点的时候,与相应用户输入的匹配符进行比对,筛选出匹配的ListView的列表中的项
    mListView.setTextFilterEnabled(true);
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {String item = (String) adapter.getItem(position);TextView textView = findViewById(R.id.text_tags);textView.setText(item);content.setTags(item);dialog.dismiss();}
    });标签选择搜索栏:![](https://img-blog.csdnimg.cn/img_convert/308cb6d9fea844b46e19bdfcd8bc8630.png)同时,添加tags的同时写入文件,文件命名TAGS用来存储已经使用过的TAGS以方便搜索及下次调用。增加标签:![](https://img-blog.csdnimg.cn/img_convert/96b5cc86e14bfd9d1ba61c188925991b.png)
  • 时间戳选项

    自定义对话框弹窗,可以滚动日期选择时间,也可以通过按钮对时间进行操作,操作后的时间会显示在界面上,对应的星期信息将显示在对话框的标题栏,选择完日期按下确定后,可以将时间戳显示在属性界面上。

  • Notes添加

    Notes添加页面,从文本框中输入内容。

    同时可以通过点击NOTES按钮显示已输入的Notes:

Part 3.6 FILE IO设计(Org-mode)

后台数据存储要求不同文件用文本形式按照 Org-mode 的模式进行存储,多级任务 Item 存储形式如下(每个新的 Item 都以 * 号开头,下一级子目录比上一级多一个 * 号)文件读取时为一串字符串,需对文件内容进行拆分,同时,文件内容有不确定数目的Item及其子Item,所以为了数据获取的便捷性,定义了三个Class用来存储一个文件的具体内容:
  • 一级文件

    一级文件包含filename文件名,num_main_item表示一共有多少个一级item,items用于存储一级item及其子items。
    http://www.biyezuopin.vip

文件读取与存储都在sdcard上进行,所以需要在manifest.xml文件中添加写入和读取许可:

<!-- SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><!--读取SDCard数据权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><!-- 向SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

同时为了方便使用,将写入文件和从文件读取写成函数,以方便后续调用,其中,读取函数返回之前定义的结构体,包含了所有文件:

public Files_content ReadFromFile(String filename) {...}
public void WriteToFile(Files_content one_file) {...}public static void writeExternal(Context context, String filename, String content) throws IOException {...}
public static String readExternal(Context context, String filename)
throws IOException {}

为了方便手机查询org-mode文件,将文件名后缀定义为.txt方便手机查看文件,文件在手机上存储的具体格式如下:

资源下载地址:https://download.csdn.net/download/sheziqiong/85662015
资源下载地址:https://download.csdn.net/download/sheziqiong/85662015

基于Android的文本笔记类APP设计相关推荐

  1. 基于Android的漫画阅读器App设计与实现,安卓、MySQL、Java、Andriod Studio,前台用户+后台管理,完美运行,有一万五千字论文。

    基于Android的漫画阅读器App设计与实现,安卓.MySQL.Java.Andriod Studio,前台用户+后台管理,完美运行,有一万五千字论文. 用户模块功能: 引导页:首先进入APP之后会 ...

  2. 基于Android的万豪酒店APP设计与实现

    20世纪90年代以来,随着网络.通信和信息技术的突破性进展,Internet在全球爆炸性增长并迅速普及.在这种时代背景下一些传统的行业,也发生了变化,本次设计研究的就是酒店行业在移动应用软件中是发展趋 ...

  3. 基于Android Studio的记账类app开发全过程

    研究背景和意义 随着社会的发展,人们的消费水平有了明显提高,消费理念也发生了一定变化.合理的消费理念对于构建社会主义和谐社会具有十分重要的意义.大学生作为消费群体的重要组成部分,他们的消费行为对大学生 ...

  4. android 智能家居 设计 实现,基于Android系统的智能家居APP设计与实现.doc

    PAGE 22 PAGE 21 基于Android的智能家居APP的设计与实现 华北电力大学硕士学位论文 摘 要 - PAGE VI - PAGE I 摘 要 随着科学技术的不断发展,人们生活水平也逐 ...

  5. android课程表需求分析,运动类APP设计之需求分析

    一.行业背景 近些年随着物质条件的改善,人们越来越重视自己的身体,所以也越来越多的人会进行身体锻炼.同时又由于移动互联的飞速发展,大量的运动App 也随之产生.而跑步在所有锻炼方式中属于无门槛无准备便 ...

  6. 基于Android的照片分组共享APP设计与实现

    资源下载地址:https://download.csdn.net/download/sheziqiong/85927168 资源下载地址:https://download.csdn.net/downl ...

  7. 基于Android的仓库管理系统APP设计与实现

    目 录 目 录 III 1 引言 1 1.1小型仓库管理系统开发背景 1 1.1.1 Android移动应用开发产业的现状分析 2 1.1.2 Android平台的市场优势 3 1.2 课题开发内容与 ...

  8. 基于Android的社交游戏百宝箱App设计与实现

    目录 一.产品设计方案 1 (一)项目实施可行性报告 1 1.可行性研究前提 1 2.技术可行性分析 2 3.市场可行性分析 3 (二)产品定位及目标 4 1.产品需求 4 2.产品定位 4 3.产品 ...

  9. 基于Android Studio的记账类app开发

    功能分析 记账 APP 需要有如下三个系统: 统计系统.记账系统.用户系统. 统计系统需要实现当月消费统计,包括收入.支出.结余等内容, 并可以让用户通过可视化图的方式清晰了解使用情况. 记账系统需要 ...

最新文章

  1. ERP与EWM集成配置-ERP端组织架构(二)
  2. win7安装omnetpp-4.6
  3. android6.0进入Material Design时代
  4. vmware虚机无法重启关机的强制处理办法
  5. 【PAT乙】1033 旧键盘打字 (20分) 字符串
  6. Flash对联广告及关闭按钮的制作
  7. C语言课程设计-车辆信息管理系统
  8. 简述对CAN协议栈的理解
  9. 读取npy格式的文件
  10. Android 控件获取焦点
  11. 米兔机器人魔方_米兔指尖积木?就要盘它
  12. vue安装node-sass错误
  13. layui实现空气日历动态日期变色
  14. Python实现“维基百科六度分隔理论“之基础爬虫
  15. Cousera Machine Learning 笔记:Gradient Descent
  16. 牙齿底部粉色原因-ECR(External cervical resorption)
  17. 数据库视频——操作查询
  18. 自定义ro.build.fingerprint
  19. 爬虫:python爬取简历模板
  20. 第五章 [BX]和loop指令

热门文章

  1. Javascript静态变量与实例变量
  2. FPGA[视频+文档+例程]170G相关资料放送(持续更新)
  3. 卡西欧350计算机度分秒转换,卡西欧FX-4500PA计算器怎样将如:12.58244度转换成度分秒啊...
  4. Field myFeignClient in com.zkh.controller.FeignController required a bean of type 'com.zkh.feign.MyF
  5. java 转换pdf页面尺寸_Java PDF页面设置——页面大小、页边距、纸张方向、页面旋转...
  6. 最新|神秘的互联网大厂薪资和职级!
  7. 操作系统OS linux实验日记
  8. 《第一行代码》 第一章:第一行Android代码
  9. 2022最全Java后端面试真题、两万字1000+道堪称史上最强的面试题不接受任何反驳
  10. apos mysql,The /usr/local/mysql/data directory is not owned by the apos;mysqlapos; to apos;_mysql...