此次做的Android简易记事本的存储方式使用了SQLite数据库,然后界面的实现比较简单,但是,具有增删改查的基本功能,这里可以看一下效果图,如下:


具体操作就是长按可以删除操作,点击可以进行修改,点击添加笔记按钮可以添加一个笔记。

首先我们需要三个界面样式一个是我们的进入程序时的第一个界面,然后第一个界面里面有一个ListView,这个ListView需要一个xml来描述里面的各个元素,这也是第二个。还有一个就是我们的编辑页面的界面。
三个xml描述文件如下:

activity_main.xml:进入程序的第一个界面

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity" ><TextView   android:layout_height="wrap_content"  android:layout_width="fill_parent"  android:text="记事本列表"  android:textSize="20sp"  android:paddingTop="10dp"  android:paddingBottom="5dp"  android:gravity="center"/>  <LinearLayout  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:layout_weight="1" >  <ListView  android:id="@+id/listNote"  android:layout_margin="5dp"  android:layout_width="match_parent"  android:layout_height="wrap_content" >  </ListView>  </LinearLayout>  <Button  android:id="@+id/addNote"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:layout_gravity="center"  android:layout_marginBottom="10dp"  android:text="添加笔记"  android:textSize="20sp" />  </LinearLayout>

note_item.xml:描述记事本列表中每个元素的各个控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextView
        android:id="@+id/noteTitle"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:singleLine="true"android:text=""android:textAppearance="?android:attr/textAppearanceLarge" /><TextView
        android:id="@+id/noteCreateTime"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:text="" /></LinearLayout>

note_editor.xml:编辑界面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextView android:id="@+id/noteId"android:visibility="gone"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""/><EditText
        android:id="@+id/title"android:layout_width="match_parent"android:layout_height="wrap_content"android:ems="10" android:hint="输入标题"><requestFocus /></EditText><EditText
        android:id="@+id/content"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:hint="输入内容"android:gravity="left"></EditText><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_gravity="center"android:gravity="center"><Button  android:id="@+id/save"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_gravity="center"  android:layout_marginBottom="10dp"  android:text="保存"  android:textSize="20sp" />  <Button  android:id="@+id/cancel"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_gravity="center"  android:layout_marginBottom="10dp"  android:text="取消"  android:textSize="20sp" />  </LinearLayout></LinearLayout>

现在我们可以考虑我们底层的数据库的操作了,这里有一个类专门用于与数据库打交道,如下:
DBService.java

public class DBService {private static SQLiteDatabase db = null;static {//新建或者打开dbdb = SQLiteDatabase.openOrCreateDatabase("data/data/cn.lger.notebook/NoteBook.db", null);String sql = "create table NoteBook(_id integer primary key autoincrement,title varchar(255),content TEXT, createTime varchar(25))";//判断是否存在表NoteBook,如果不存在会抛出异常,捕捉异常后创建表try{db.rawQuery("select count(1) from NoteBook ",null);}catch(Exception e){db.execSQL(sql);}}public static SQLiteDatabase getSQLiteDatabase(){return db;}public static Cursor queryAll(){return db.rawQuery("select * from NoteBook ",null);}public static Cursor queryNoteById(Integer id){return db.rawQuery("select * from NoteBook where _id =?",new String[]{id.toString()});}public static void deleteNoteById(Integer id){if(id == null)return ;db.delete("NoteBook", "_id=?", new String[]{id.toString()});}public static void updateNoteById(Integer id, ContentValues values){db.update("NoteBook", values, "_id=?", new String[]{id.toString()});}/*** 添加一个笔记,并且记录当前添加的时间* @param values 表中的各个字段值*/public static void addNote(ContentValues values){values.put("createTime", DateFormat.format("yyyy-MM-dd kk:mm:ss", System.currentTimeMillis()).toString());db.insert("NoteBook", null, values);}
}

下面我们在进入第一个界面的时候需要访问数据库并且将数据的值不断的更新(比如进行了删除操作的时候或者添加操作之后需要刷新),这样,我们就可能需要重写ActivityonResume(),这样就可以调用Cursorrequery()来刷新我们列表中ListView的结果。还有我们需要长按删除,点击修改,添加笔记这些都需要监听事件,因此,这里还要设置监听
具体MainActivity.java的代码如下:

public class MainActivity extends Activity {private Cursor listItemCursor = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 设置添加笔记按钮事件,切换activitythis.findViewById(R.id.addNote).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Intent in = new Intent();in.setClassName(getApplicationContext(),"cn.lger.notebook.NoteEditActivity");startActivity(in);}});// 查询所有笔记,并将笔记展示出来listItemCursor = DBService.queryAll();SimpleCursorAdapter adapter = new SimpleCursorAdapter(MainActivity.this,R.layout.note_item, listItemCursor, new String[] { "_id","title", "createTime" }, new int[] { R.id.noteId,R.id.noteTitle, R.id.noteCreateTime },CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);((ListView) this.findViewById(R.id.listNote)).setAdapter(adapter);initListNoteListener();}/*** 初始化笔记列表的长按和点击事件*/private void initListNoteListener() {// 长按删除((ListView) this.findViewById(R.id.listNote)).setOnItemLongClickListener(new OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> parent,View view, int position, final long id) {new AlertDialog.Builder(MainActivity.this).setTitle("提示框").setMessage("确认删除该笔记??").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0,int arg1) {DBService.deleteNoteById((int) id);//删除后刷新列表MainActivity.this.onResume();Toast.makeText(MainActivity.this,"删除成功!!",Toast.LENGTH_LONG).show();}}).setNegativeButton("取消", null).show();return true;}});//点击进行修改操作((ListView) this.findViewById(R.id.listNote)).setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {Intent in = new Intent();in.setClassName(view.getContext(),"cn.lger.notebook.NoteEditActivity");// 将id数据放置到Intent,切换视图后可以将数据传递过去in.putExtra("id", id);startActivity(in);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}/*** 当从另一个视图进入该视图会调用该方法*/@Overrideprotected void onResume() {super.onResume();// 要求刷新主页列表笔记if (listItemCursor != null) {listItemCursor.requery();}}
}

上面的代码中还涉及到了一个视图切换后的传递信息的操作,就是通过IntentputExtra(key, value)这样可以在切换后的视图中调用函数getIntent().get~Extra(key, replace);来接收传递的数据。

下面是我们的编辑界面中对应的具体实现代码,这里有判断是使用更新操作还是添加操作,主要是判断MainActivity.java有没有传递过来id,如果有就是通过这个id来更新操作,没有就是添加操作。
编辑界面对应的具体实现代码如下:
NoteEditActivity.java

public class NoteEditActivity extends Activity {private EditText titleEditText = null;private EditText contentEditText = null;private String noteId = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.note_editor);titleEditText = (EditText) NoteEditActivity.this.findViewById(R.id.title);contentEditText = (EditText) NoteEditActivity.this.findViewById(R.id.content);initNoteEditValue();//取消按钮监听this.findViewById(R.id.cancel).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {NoteEditActivity.this.finish();}});this.findViewById(R.id.save).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {final String title = titleEditText.getText().toString();final String content = contentEditText.getText().toString();//判断标题和内容是否为空,不为空才能保存if ("".equals(title) || "".equals(content)) {Toast.makeText(NoteEditActivity.this, "标题或者内容不能为空",Toast.LENGTH_LONG).show();return;}//提示保存new AlertDialog.Builder(NoteEditActivity.this).setTitle("提示框").setMessage("确定保存笔记吗??").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0,int arg1) {ContentValues values = new ContentValues();values.put("title", title);values.put("content", content);//如果noteId不为空那么就是更新操作,为空就是添加操作if (null == noteId || "".equals(noteId))DBService.addNote(values);elseDBService.updateNoteById(Integer.valueOf(noteId),values);//结束当前activityNoteEditActivity.this.finish();Toast.makeText(NoteEditActivity.this, "保存成功!!",Toast.LENGTH_LONG).show();}}).setNegativeButton("取消", null).show();}});}/*** 初始化编辑页面的值(如果进入该页面时存在一个id的话),比如标题,内容。*/private void initNoteEditValue() {// 从Intent中获取id的值long id = this.getIntent().getLongExtra("id", -1L);// 如果有传入id那么id!=-1if (id != -1L) {// 使用noteId保存idnoteId = String.valueOf(id);// 查询该id的笔记Cursor cursor = DBService.queryNoteById((int) id);if (cursor.moveToFirst()) {// 将内容提取出来titleEditText.setText(cursor.getString(1));contentEditText.setText(cursor.getString(2));}}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}
}

以上就将我们的安卓简易记事本完成了,源码已经上传GitHub。

界面采用了拿来主义,可以参考下面文章
http://blog.csdn.net/cjs68/article/details/50211543

Android简易记事本相关推荐

  1. Android简易项目SQLite的简单运用——简易记事本

    关于这个简易记事本具有的功能和要点 1.功能 具备简单的查询,修改,更新和删除功能 2. 要点 主要通过继承SQLiteOpenHelper和运用相关类方法来实现相关功能 Cursor的基础运用 运用 ...

  2. 黑马程序员 自编简易记事本应用程序

    -------------------android培训. java培训.期待与您交流!------------------- 自编简易记事本应用程序 //源代码: package mytxt; im ...

  3. 微信小程序 - 实战小案例 - 简易记事本

    多项技能,好像也不错.学习一下微信小程序. 教程:https://mp.weixin.qq.com/debug/wxadoc/dev/ 简介:一套用来开发在手机微信上运行的app框架,不用安装 组成: ...

  4. Java案例:简易记事本

    Java案例:简易记事本 一.案例演示 二.涉及知识点 1.窗口(JFrame) 2.标签(JLabel) 3.文本区(JTextArea) 4.菜单 5.文件读写 6.事件处理 7.工具栏   三. ...

  5. android简易计算器

    android简易计算器 说明:完成简易版计算器,能够实现基本的加.减.乘.除运算 图示: 布局文件 <?xml version="1.0" encoding="u ...

  6. QT——2.3简易记事本的实现:练习QFile、QFileDialog、QTextStream、QFontDialog、QColorDialog、QDateTime等类的应用

    [目标]:做一个简易记事本,实现练习QFile.QFileDialog.QDir.QTextStream.QFontDialog.QFont.QColorDialog.QColor.QDateTime ...

  7. Android简易微信界面

    Android简易微信界面 专选课移动互联网开发的第一次作业,利用Android Studio进行了简易Android微信界面的搭建 完整项目代码 界面样式展示: 界面xml源码 主界面xml源码 & ...

  8. 基于android记事本毕业论文,基于Android的记事本应用的设计与实现-毕业论文.doc...

    基于Android的记事本应用的设计与实现-毕业论文 毕 业 设 计 说 明 书 课题名称基于Android的记事本应用的设计与实现院 系计算机与软件学院专 业计算机多媒体技术班 级计媒1011学 号 ...

  9. android简单记事本

    android简单记事本 近段学习数据存储写个小程序,简单记事本,实现点击查看删除,添加保存.闲话不多说直接步入正题. 一.上图看着更直观. 1.这是该程序的主界面.上边是一个Button,下边是Li ...

最新文章

  1. 如果asp.net mvc中某个action被执行了两次,请检查是不是以下的原因
  2. 写了篇爬虫文章,收到律师函,怎么办
  3. 「周末观赛指南」澳网新王当立?勇士冲击十连胜
  4. 1949:【10NOIP普及组】数字统计
  5. Python标准库zlib提供的数据压缩功能
  6. linux 标准函数注释,Linux 驱动程序中相关函数注释汇总(跟新中)
  7. postman如何模拟Map参数请求呢?
  8. 浅谈函数的重入与不可重入
  9. C++网络编程实例之多个客户端交互(多线程)
  10. 16位微型计算机 下册,十六位微型计算机
  11. GPS卫星同步时钟系统(北斗授时服务器)的技术研究
  12. C#多线程之三:解决多线程编程中大并发数等待唤醒的问题
  13. 傲腾服务器硬盘,Intel傲腾Optane硬盘实测:“高价U盘”,加速性能不错
  14. Intel核芯显卡微架构浅析
  15. 【Vue】Emitted value instead of an instance of Error
  16. 辞旧迎新,继往开来:2021→2022
  17. 计算机c盘空间满了应该怎么办,C盘空间满了怎么办?我来教你你如何解决
  18. IDEA如何执行maven命令
  19. 项目管理中,要明确每个人的工作职责
  20. win10远程桌面连接计算机密码错误,win10远程桌面连接错误

热门文章

  1. gitlab与Jenkins
  2. 女孩子应该体谅男孩子的九个地方
  3. Python input 函数
  4. 音视频基础知识---像素格式RGB
  5. 分布式共识算法(拜占庭容错算法)的系列整理一:PBFT、PoW、PoS、DPos
  6. 基于遗传算法(GA)的计算卸载策略的求解(二)
  7. myeclipse清理缓存方法(图解)
  8. java猴子分桃问题_猴子分桃问题?
  9. python老鼠打洞问题_内网渗透-老鼠打洞之SSH隧道
  10. canvas 圆角矩形,背景圆角矩形