开卷语 俗话说,“熟读唐诗三百首,不会作诗也会吟”。最近收集了很多 Android的示例代码,从这些代码的阅读和实验中学习到很多知识,从而产生写这个系列的打算,目标就是一步步跟着实例进行动手实作,真正从“做”中体会和学习Android 开发。 本文是这个系列的第一篇,目标是 Android 自带的一个范例程序:记事本,将分为四篇文章进行详细介绍。 预备知识 搭建开发环境,尝试编写”Hello World”,了解 Android 的基本概念,熟悉 Android 的 API(官方文档中都有,不赘述)。 程序截图 先来简单了解下程序运行的效果 程序入口点 类似于win32 程序里的WinMain 函数,Android 自然也有它的程序入口点。它通过在 AndroidManifest.xml 文件中配置来指明,可以看到名为NotesList 的activity 节点下有这样一个 intent-filter,其 action 为android.intent.action.MAIN, Category 指定为 android.intent.category.LAUNCHER,这就指明了这个 activity 是作为入口activity,系统查找到它后,就会创建这个 activity 实例来运行,若未发现就不启动(你可以把 MAIN 改名字试试)。
NotesList 详解 就从入口点所在的activity(见图 1)开始,可以看到这个 activity 最重要的功能就是显示日志列表。这个程序的日志都存放在 Sqlite 数据库中,因此需要读取出所有的日志记录并显示。先来看两个重要的私有数据,第一个PROJECTION 字段指明了“日志列表“所关注的数据库中的字段(即只需要ID和Title 就可以了)。 private static final String[] PROJECTION = new String[] { Notes._ID, // 0 Notes.TITLE, // 1 }; 第二个字段COLUMN_INDEX_TITLE 指明title 字段在数据表中的索引。 private static final int COLUMN_INDEX_TITLE = 1; 然后就进入第一个调用的函数onCreate。 Intent intent = getIntent(); if (intent.getData() == null) { intent.setData(Notes.CONTENT_URI); } 因为 NotesList 这个 activity 是系统调用的,此时的intent 是不带数据和操作类型的,系统只是在其中指明了目标组件是 Notelist,所以这里把”content:// com.google.provider.NotePad/notes”保存到 intent 里面,这个 URI ...