本文整理自网络,侵删。
本文实例为大家分享了Android手机开发设计之记事本功能,供大家参考,具体内容如下
一、需求分析
1.1业务需求分析
近年来,随着生活节奏的加快,工作和生活的双重压力全面侵袭着人们,如何避免忘记工作和生活中的诸多事情而造成不良的后果就显得非常重要。为此我们开发一款基于Android系统的简单记事本,其能够便携记录生活和工作对诸多事情,从而帮助人们有效地进行时间管理。
1.2功能需求分析
本记事本项目希望可以开发出一款符合用户生活工作习惯的简单应用,能够满足用户的各方面需求,可以对记事进行增加、查看、修改和删除,要求功能完善丰富并且具有良好的用户界面和交互体验。
二、项目设计
2.1功能模块设计
2.1.1记事本基本操作
记事本基本操作是该项目的核心部分,提供添加、查看、修改、删除记事本信息的功能,提供记事本动态更新的功能。
2.1.2 记事本主界面列表展示
用户可能需要创建许多记事事项,并且需要对这些记录事项进程基本操作,记事本的列表展示能使用户界面更加简洁清晰,且给用户带来使用方便。
2.1.3 记事本数据存储
记事本最重要功能即记录和保存用户易遗忘的日期和事件,为了持久地将用户记录事项信息保存下来,需要将这些信息存储到数据库中,记事本需要保存的信息字段有编号、事件内容和保存事件的具体时间。
其功能模块图如图所示。
2.2数据库设计
由上面的功能模块分析可知,本记事本项目的数据库设计主要包括三个字段名:编号id、事件内容content和保存事件的时间notetime,其数据库表如下表所示:
2.3界面设计
2.3.1记事本主界面
该界面主要包括添加按钮和记录事项列表。记事本主界面设计如下图所示。
2.3.2 添加记录事项界面
该界面主要包括清除内容和保存内容按钮以及文本编辑。记事本添加记录事项如下图所示。
三、项目实现
3.1 NotepadBean类
由于记事本中的每个记录都会有其唯一的编号id、记录内容notepadContent和保存记录的时间notepadTime属性,因此我们需要创建一个NotepadBean类用于存放这些属性,并实现其相应的getter和setter方法,其主要代码如下:
public class NotepadBean { ? ? private String id;//记录编号 ? ? private String notepadContent;//记录的内容 ? ? private String notepadTime;//保存记录的时间 ? ? public String getId() { ? ? ? ? return id; ? ? } ? ? public void setId(String id) { ? ? ? ? this.id = id; ? ? } ? ? public String getNotepadContent() { ? ? ? ? return notepadContent; ? ? } ? ? public void setNotepadContent(String notepadContent) { ? ? ? ? this.notepadContent = notepadContent; ? ? } ? ? public String getNotepadTime() { ? ? ? ? return notepadTime; ? ? } ? ? public void setNotepadTime(String notepadTime) { ? ? ? ? this.notepadTime = notepadTime; ? ? } }
3.2 NotepadAdapter类
由于记事本界面的记录列表是使用ListView控件展示,因此需要创建一个数据适配器NotepadAdapter类对ListView控件进行数据适配,我们可以先创建NotepadAdapter类,再在NotepadAdapter类中创建一个ViewHolder类初始化Item界面中的控件,其中主要代码如下:
public View getView(int position, View convertView, ViewGroup parent) { ? ? ViewHolder viewHolder; ? ? if (convertView==null){//加载Item界面对应的布局文件 ? ? ? ? convertView=layoutInflater.inflate(R.layout.notepad_item,null); ? ? ? ? viewHolder=new ViewHolder(convertView);//创建ViewHolder对象 ? ? ? ? convertView.setTag(viewHolder);//创建ViewHolder对象 ? ? }else { ? ? ? ? viewHolder=(ViewHolder) convertView.getTag();//convertView关联ViewHolder对象 ? ? } ? ? NotepadBean notepadBean=(NotepadBean)getItem(position);//将获取的数据显示到对应的控件上 ? ? viewHolder.tvNotepadContent.setText(notepadBean.getNotepadContent()); ? ? viewHolder.tvNotepadTime.setText(notepadBean.getNotepadTime()); ? ? return convertView; } class ViewHolder{ ? ? TextView tvNotepadContent; ? ? TextView tvNotepadTime; ? ? public ViewHolder(View view){ ? ? ? ? tvNotepadContent=view.findViewById(R.id.item_content);//记录的内容 ? ? ? ? tvNotepadTime=view.findViewById(R.id.item_time);//保存记录的时间 ? ? } }
3.3 SQLiteHelper类
在记事本程序中存储和读取记录的数据都是通过操作数据库完成的,我们需要创建SQLiteHelper类实现对数据库中表的增删改查,以及利用数据库中的工具类DBUtils来定义数据库的名称、表名、数据库版本、数据库表中的列名以及获取当前日期等信息,其主要代码如下:
创建数据库:
public SQLiteHelper(Context context){ ? ? super(context, DBUtils.DATABASE_NAME,null,DBUtils.DATABASE_VERION); ? ? sqLiteDatabase=this.getWritableDatabase(); }
创建表:
@Override public void onCreate(SQLiteDatabase db){ ? ? db.execSQL("CREATE TABLE "+DBUtils.DATABASE_TABLE+"("+DBUtils.NOTEPAD_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+DBUtils.NOTEPAD_CONTENT+" text, "+DBUtils.NOTEPAD_TIME+" text)"); }
添加数据:
public boolean insertData(String userContent,String userTime){ ? ? ContentValues contentValues=new ContentValues(); ? ? contentValues.put(DBUtils.NOTEPAD_CONTENT,userContent); ? ? contentValues.put(DBUtils.NOTEPAD_TIME,userTime); ? ? return sqLiteDatabase.insert(DBUtils.DATABASE_TABLE,null,contentValues)>0; }
删除数据:
public boolean deleteData(String id){ ? ? String sql=DBUtils.NOTEPAD_ID+"=?"; ? ? String[] contentValuesArray=new String[]{String.valueOf(id)}; ? ? return sqLiteDatabase.delete(DBUtils.DATABASE_TABLE,sql,contentValuesArray)>0; }
修改数据:
public boolean updateData(String id,String content,String userYear){ ? ? ContentValues contentValues=new ContentValues(); ? ? contentValues.put(DBUtils.NOTEPAD_CONTENT,content); ? ? contentValues.put(DBUtils.NOTEPAD_TIME,userYear); ? ? String sql=DBUtils.NOTEPAD_ID+"=?"; ? ? String[] strings=new String[]{id}; ? ? return sqLiteDatabase.update(DBUtils.DATABASE_TABLE,contentValues,sql,strings)>0; }
查询数据:
public List<NotepadBean> query(){ ? ? List<NotepadBean>list=new ArrayList<NotepadBean>(); ? ? Cursor cursor=sqLiteDatabase.query(DBUtils.DATABASE_TABLE,null,null, ? ? ? ? ? ? null,null,null,DBUtils.NOTEPAD_ID+" desc"); ? ? if (cursor!=null){ ? ? ? ? while (cursor.moveToNext()){ ? ? ? ? ? ? NotepadBean noteInfo=new NotepadBean(); ? ? ? ? ? ? String id=String.valueOf(cursor.getInt(cursor.getColumnIndex(DBUtils.NOTEPAD_ID))); ? ? ? ? ? ? String content=cursor.getString(cursor.getColumnIndex(DBUtils.NOTEPAD_CONTENT)); ? ? ? ? ? ? String time=cursor.getString(cursor.getColumnIndex(DBUtils.NOTEPAD_TIME)); ? ? ? ? ? ? noteInfo.setId(id); ? ? ? ? ? ? noteInfo.setNotepadContent(content); ? ? ? ? ? ? noteInfo.setNotepadTime(time); ? ? ? ? ? ? list.add(noteInfo); ? ? ? ? } ? ? ? ? cursor.close(); ? ? } ? ? return list; }
3.4 NotepadActivity类
相关阅读 >>
Sqlite不支持right join的解决办法group by
database.net强大的数据库查询管理工具使用图文教程
如何通过android stduio来编写一个完整的天气预报app
更多相关阅读请进入《Sqlite》频道 >>
数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。