本项目Github
代码解读 Code interpretation
记事本功能 NoteBook funuction
包含两个部分,一个是部分单纯的文本记录功能,还有一个是每一个笔记的提醒时间设置功能。每一个笔记的id、标题、内容和提醒时间等相关信息都作为Note类的属性进行存放。
SQLite数据库中表的创建也是按照Note类的属性的。
用户点击首页右上角的“+”号创建笔记,笔记的创建需要用户输入标题和内容,提醒时间如果没有设置就会使用默认的提醒时间,提交笔记保存后会判断笔记输入的内容是否为空,即文本长度为0,然后将输入的内容封装成Note类型的对象,然后调用SimpleDatabase类中的addNote方法,传递参数为Note对象,使用ContentValues
插入数据,每一个笔记的id属性都是由插入数据库中存储后才产生并返回的,id是唯一的所以可以根据笔记的id进行查找。
首页展示用户的已有的笔记列表时会使用List<Note>存储从数据库查找的所有已经创建保存的笔记。如果用户还没有保存过笔记,即List<Note>是空的,就展示activity_main.xml中TextView“未记过笔记,请点右上方+进行创建”的提示信息。
如果搜寻结果不为空,即用户记录过笔记,就用displayList方法将List<Note>传递进去,借助RecyclerView、Adapter显示数据。
首页中笔记的显示还要添加被选时允许展示笔记详情内容的事件,用的是itemView的setOnClickListener,点击后会跳转到对应笔记的内容显示,用户的是笔记的ID属性进行Activity的跳转。
其中一个重要的方法是通过id获取笔记,利用id作为数据库查找的依据。
此时界面右下方的FloatingActionButton提供了删除功能,设置的点击事件为笔记删除,用的是SimpleDatabase的deleNote方法,传入了Note对象的id属性进行删除,并且用Toast提醒用户笔记已经被删除的信息。
笔记详情展示界面还有允许用户编辑修改的功能,编辑按钮在Toolbar上面的Menu中,如果选择的是edit的item就要跳转到编辑界面,这个界面与笔记创建界面几乎相同,但是完成编辑后调用的是SimpleDatabase的editNote方法,同样是传入将笔记的id、标题、时间、内容等信息封装而成的对象,在数据库中的更新也是借助笔记的id进行的。
闹钟提醒功能 Clock function
ClockManager类中存放的是获取系统闹钟服务、取消闹钟以及添加脑中的服务,在添加闹钟与更新闹钟均使用addAlarm函数,在函数中,添加闹钟前,如果已经添加过闹钟,则该闹钟被取消。
在名字为edit和add_note的xml文件中,添加了提醒时间框。
在EditText中设置参数,让其不可输入但是可以点击
在add_note类中datePickClick在点击该EditText的时候被调用。弹出时间选择器供用户选择时间
点击保存后,以下代码会在系统中添加闹钟用于提醒
到时间后,ClockReceive会接收到广播,onReceive函数接收到广播后调用postToClockActivity函数来启动ClockActivity类,ClockActivity调用函数clock();
弹出dialog_alarm_layout布局,用于提醒用户事件未完成
函数中以下三个函数让提醒的界面有闹铃声音以及震动
如果屏幕没有唤醒则调用wakeUpAndUnlock函数