Android平台应用开发实例:Notepad

移动开发 Android
这个教程中将会在Android平台上建立一个简单的应用开发Notepad。开发中需要调用Sqlite数据库,以及通过xml文件定义界面等。

在这个教程中将会建立一个简单列表界面,允许用户添加删除,但是不能编辑。包括如下的内容:

◆ListActivities的基础知识和如何建立菜单项。

◆如何使用SQLite 数据库访问数据。

◆如何使用ArrayAdapter绑定数据到ListView (最简单的一种方式)。

◆最基本的Layout,包括如何显示一个ListView,如何向一个菜单插入菜单项以及如何响应菜单

第一步 建立工程

使用Eclipse建立一个工程Notepad

第二步 如何使用Sqlite数据库

和系统相关的接口调用都要用到Context类。

1打开数据库

代码片段:

public DBHelper(Context ctx) {
try {
//打开已经存在的数据库
db = ctx.openDatabase(DATABASE_NAME, null);
} catch (FileNotFoundException e) {
try {
//建立新的数据库
db =
ctx.createDatabase(DATABASE_NAME, DATABASE_VERSION, 0, null);
//建立数据表
db.execSQL(DATABASE_CREATE);
} catch (FileNotFoundException e1) {
db = null;
}
}
}

Context类的openDatabase可以打开一个已经存在的数据库,如果数据库不存在,将会抛出FileNotFoundException异常。可以通过Context类的createDatabase函数建立一个新的数据库。通过调用SQLiteDatabase 的execSQL方法,执行一条SQL语句建立一个新的数据表。

2.获取表中的数据

代码如下:

public List﹤Row﹥ fetchAllRows() {
ArrayList﹤Row﹥ ret = new ArrayList﹤Row﹥();
try {
Cursor c =
db.query(DATABASE_TABLE, new String[] {
"rowid", "title", "body"}, null, null, null, null, null);
int numRows = c.count();
c.first();
for (int i = 0; i ﹤ numRows; ++i) {
Row row = new Row();
row.rowId = c.getLong(0);
row.title = c.getString(1);
row.body = c.getString(2);
ret.add(row);
c.next();
}
} catch (SQLException e) {
Log.e("booga", e.toString());
}
return ret;
}

 

建立一个游标类Cursor 通过SQLiteDatabase 的query方法查询一个表格。有了Cursor就可以遍历所有的记录了。

3添加新的记录

public void createRow(String title, String body) {
ContentValues initialValues = new ContentValues();
initialValues.put("title", title);
initialValues.put("body", body);
db.insert(DATABASE_TABLE, null, initialValues);
}

 

 

构造一个ContentValues类,通过调用put方法,可以设置一条记录的属性。通过调用SQLiteDatabase的insert方法添加一条新的记录。

4 删除记录

public void deleteRow(String str)
{
db.delete(DATABASE_TABLE, "title=\'" + str+"\'", null);
}

 

直接调用SQLiteDatabase的delete方法,第二个参数是一个SQL条件表达式。

第三步 显示方式和界面

大部分的界面都有一个Layout。我们的界面是显示在整个屏幕中的List。还有其他的显示方式,比如悬浮的窗口(Dialog,Alert)。
打开main.xml文件。
这是一个定义界面显示风格的资源文件。

a. 所有的界面资源文件都从这样的一行开始: ﹤?xml version="1.0" encoding="utf-8"?﹥.

b. 一般的类型定义都是LinearLayout (并不是总是)

c. 关于XML的名称空间的定义,总是下面一行:

xmlns:android="http://schemas.android.com/apk/res/android"

#p#

第四步 编辑notepad_list.xml文件

最终如下所示:

﹤?xml version="1.0" encoding="utf-8"?﹥
﹤LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:layout_width=" fill_parent "
android:layout_height=" fill_parent "﹥
﹤ListView id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/﹥
﹤TextView id="@id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_notes"/﹥
﹤/LinearLayout﹥


a. ListView和TextView只能显示一个,正常情况下,ListView会被显示出来,当没有任何一个数据的时候将会显示一个TextView ,显示出 "还没有建立任何数据!" ,字符串资源将被定义在资源文件中。

b. 在 ListView 和 TextView中的带@符号的字符串表示,XML解析器将会分析出后面的数据是一个资源ID。

c. 通过更改资源文件,在R.java文件中的代码会反应出来。在代码中使用的资源都要通过R.java中的常量进行索引

第五步 定义一个显示列表项风格的配置文件

在res/layout目录现建立一个新的文件notes_row.xml.

添加如下的代码:

﹤?xml version="1.0" encoding="utf-8"?﹥

﹤TextView id="@+id/text1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/﹥

 

 

第六步

把Notepad 的父类从 Activity 改为 ListActivity:

public class Notepad extends ListActivity

 

注意: 必须导入ListActivity,在 Eclipse下可以使用, ctrl-shift-O

第七步

有三个方法: onCreate, onCreateOptionsMenu 和 onOptionsItemSelected, 需要我们填充:

onCreate()当一个界面开始显示的时候会被调用,相当于一个界面的主函数。在这里可以初始化资源和状态。

onCreateOptionsMenu() 被用来建立一个界面的菜单。当用户点击菜单键的时候将会显示出来。

onOptionsItemSelected()当用选择菜单的时候将会被调用。

第八步

填充onCreate() 方法。

在这里可以设置界面标题,初始化DBHelper对象管理数据。填充List列表。

a. 调用super()传入参数icicle

b. setContentView to R.layout.notepad_list

c. 定义另外一个类dbHelper

d. 初始化DBHelper类。

e. 最后调用方法-fillData()-

f. onCreate()方法如下所示:

@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.notepad_list);
dbHelper = new DBHelper(this);
fillData();
}


添加私有的属性DBHelper

private DBHelper dbHelper;

 

第九步填充onCreateOptionsMenu() 方法.


在strings.xml文件中定义字符串资源。 a. 在strings.xml 文件中添加一个字符串资源

﹤string name="menu_insert"﹥添加﹤/string﹥,

﹤string name="menu_delete"﹥删除﹤/string﹥,

这些在String.xml文件中定义的资源,保存文件后,在R.java中会出先相应的资源ID。

定义一个菜单ID 在NotePad.java 中。

public static final int INSERT_ID = Menu.FIRST;
public static final int DELETE_ID = Menu.FIRST +1;

 

b. 在onCreateOptionsMenu() 中添加菜单项,返回父类法方法onCreateOptionsMenu的返回值.。代码如下所示:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
boolean result = super.onCreateOptionsMenu(menu);
menu.add(0, INSERT_ID, R.string.menu_insert);
menu.add(0, DELETE_ID, R.string.menu_delete);

return result;
}Menu.Add(num1,menuid,string)


其中num1是一个可以为菜单项排序的基数,所有一样基数的菜单项按照加入的顺序排序,基数相同的菜单项排列在一起,基数按照从小到大的顺序从上到下排列菜单项。Menuid是唯一一个菜单项的标识。当菜单项被用户选择的时候,这个标识就会在onOptionsItemSelected()方法的参数中出现。

第十步

填充onOptionsItemSelected() 方法:

当用户选择菜单以后,onOptionsItemSelected()方法将会被调用。通过调用item.getId()方法可以得到选择的菜单的ID进而区别不同的菜单。 The super.onOptionsItemSelected(item) 返回父类的onOptionsItemSelected()方法;

@Override
public boolean onOptionsItemSelected(Item item) {
switch (item.getId()) {
case INSERT_ID:
createNote();
break;
}

return super.onOptionsItemSelected(item);
}

【编辑推荐】

  1. Android中各种JAVA包的功能描述
  2. Android创建和使用数据库详细指南
  3. Android应用开发入门五问
责任编辑:yangsai 来源: IT168
相关推荐

2011-09-08 13:11:07

Android Wid实例

2009-12-16 10:41:47

Android日程表

2011-09-26 10:46:32

Android云计算开发

2013-05-20 17:51:47

Android游戏开发SurfaceView

2011-08-08 16:56:44

iPhone 字符处理 视图

2013-05-23 15:06:22

Android开发体重计算器移动应用

2010-10-29 14:08:01

.NETWindows PhoiPhone

2012-07-25 09:23:59

iOS企业应用Android

2009-03-16 15:00:16

阿里软件旺旺软件平台SaaS

2013-05-20 17:13:17

Android游戏开发CanvasPaint

2009-06-15 15:16:00

netbeans sw平台开发

2013-02-20 15:29:00

JSONAndroid开发

2011-09-07 17:54:40

Android Wid开发

2011-07-26 11:08:23

iOS 录像 录音

2012-12-21 14:59:52

Tabris

2011-05-23 15:56:56

Android

2014-08-26 11:46:46

QtAndroid实例教程

2011-04-12 08:40:23

IMFAndroid

2013-05-20 15:42:22

点赞
收藏

51CTO技术栈公众号