您好,欢迎访问三七文档
千锋3G嵌入式移动互联网技术研发中心教程:记事本练习练习目的第一步打开Notepadv1工程第二步访问和修改数据第三步布局和事件第四步创建布局第五步资源和R类第六步打开Notepadv1类第七步改变Notepadv1的继承关系第八步方法onCreate()的实现代码第九步关于菜单的属性第十步FilloutthebodyoftheonOptionsItemSelected()method第十一步添加一个新的方法createNote()第十二步列表容器第十三步运行千锋3G嵌入式移动互联网技术研发中心练习目的在本练习中,你将学习如何构建一个能让用户添加新便笺但不能编辑的简单便笺列表。具体练习目的如下:简单便笺列表ListActivities的基本功能及其创建和控制菜单选项如何使用数据库存储便笺。如何通过调用SimpleCursorAdapter方法,用一个数据库指针将数据绑定至ListView(便笺列表视图类对象)。屏幕布局的基本知识,包括如何组织列表视图的布局,如何添加便笺至Activity菜单,以及如何控制这些菜单选择(操作)。千锋3G嵌入式移动互联网技术研发中心工程在Eclipse中打开Notepadv1工程.Notepadv1工程是本阶段练习的一个起始入口。通过菜单FileNewAndroidProject新建一个Android工程。在该工程对话框中,选择Createprojectfromexistingsource。点击浏览,打开文件夹目录对话框,选择下载到本地的NotepadCodeLabNotepadCodeLab文件目录,并将其加载到该工程中。若加载文件至该工程所配置路径正确,则可以在你所选定的资源路径下看到该工程名及配置路径。单击Finish。你将在EclipseIDE的文件夹树形目录中看到Notepadv1工程已打开。如果你看到错误提示,或与某一Android压缩包相关的错误提示信息的话,鼠标右键选择工程并在弹出的右键菜单中选择AndroidToolsFixProjectProperties.(工程在所配置错误的路径下查找库文件,并修复。)千锋3G嵌入式移动互联网技术研发中心第二步访问和修改数据在本练习中,我们用一个SQLite数据库来存储我们的数据。只要你的应用程序需要访问或修改数据,就会发现这个数据库给你的帮助极大。如果你想通过其它方式访问或修改数据,你将不得不通过调用ContentProvider这一暴露数据的方法。如果你对用数据库访问或修改数据的方法很感兴趣的话,你可以学到有关提供数据内容或存储、恢复及暴露数据的全部主题。SDK目录下的samples文件夹目录中的Notepad例子也给出了如何创建一个ContentProvider的例子。关注一下NotesDbAdapter这个类——该类封装了如何通过SQLite数据库访问其中数据的方法,此方法可以让我们存储并更新便笺于SQLite数据库中。在该类的最开始是一些常量定义,这些常量在应用程序需要“从数据库中的树形字段名中查找对应数据”时会用到。同时还有一个有关数据库创建字符串的定义,用于创建一个尚不存在的数据库的关系模型。我们将有个名为’data’的数据库,并有一个称为’notes’的单表。此单表有三个字段:_id,title和body。_id按以下划线起始的命名惯例命名,在AndroidSDK中的许多地方都会用到,有助于对某一状态保持跟踪。字段_id一般只有在查询或更新数据库(按列的方式等等)时才需定义。另外两个是存储数据的简单文本字段。类NotesDbAdapter的构造函数有一个允许其与Android操作系统的各方面交互的Context(暂没想到更好的译法)。这对于一个需要用一些方式与Android操作系统交互的类来说再常见不过了。Activity类内生成Context类,所以一般当你需要Context类时,只需从Activity类传this指针即可。千锋3G嵌入式移动互联网技术研发中心类成员函数open()是调用DatabaseHelper类的一个实例,该成员函数是SQLiteOpenHelper类的局部实现。它调用getWritableDatabase(),此接口用于创建/打开一个数据库。类成员函数close()的功能即关闭数据库,释放数据库与该类关联的一些资源。类成员函数createNote()接收一个新便笺的标题及实体这两个参数的字符串,用于在数据库中创建一条新便笺。假定该新便笺创建成功,则该接口会返回此新创建的便笺在数据库中的行_id值。类成员函数deleteNote()是按某一便笺所对应的行id值,将数据库中此便笺删除。类成员函数fetchAllNotes()发出一个查询并返回一个数据库中所有记录的一个指针。query()方法调用值得好好检查和理解。第一个形参DATABASE_TABLE为将要查询的数据库单表表名(在本例中为notes)。接下来形参是我们希望返回的一系列的信息,在本例中我们希望返回的是便笺行ID(_id),标题(title)和正文(body)这三列,所有这些在字符串型数组中已规定好了。剩下的形参按顺序分别是:selection,selectionArgs,groupBy,having和orderBy。若该参数为空,则意味着我们想返回所有数据,不必分组,并按默认顺序。具体细节请参看SQLiteDatabase。千锋3G嵌入式移动互联网技术研发中心注意:返回的是一个指针而非一组行的集合。这样能使Android更有效地使用资源——不必将大量数据直接读入内存——而是通过指针,这样指针可以按需”恢复和释放数据”,这一点对于有许多行的表尤其有效。类成员函数fetchNote()与fetchAllNotes()类似。但该方法的功能是”得到某一特定行的记录”。第一个参数(置为true)表示只想得到一个明确的结果。参数(第四个参数)则按所传入的特定行id查找指定行的记录。所以我们返回的是一个只包含特定行的指针。最后,类成员函数updateNote()传入三个参数行号(rowId),便笺标题(title)和便笺正文(body),并用一个ContentValues实例去更新指定行号的记录。千锋3G嵌入式移动互联网技术研发中心第三步布局和事件大多数Activity类都有一个布局与之关联。对用户而言,布局即是Activity的界面。在本例中我们的布局将覆盖整个屏幕并提供便笺列表。全屏布局并非是一个Activity的唯一选择。你也许也想使用一个浮动布局(例如,一个对话框或警告),或许你就根本不需要一个布局(这种情况下,Activity对用户而言则是不可见的,除非某一特定类型的布局方可。)打开res/layout目录下的notepad_list.xml文件(为了查看XML标记,你得点击底部的xmlTab)这是一个大部分为空的布局定义文件。这里有些有关一个布局文件你必须了解的内容:所有的Android布局文件都必须以XML头标记行作为起始行:?xmlversion=1.0encoding=utf-8?。紧接着的多为(但不一定总是)一个有关布局类型的定义,本例中即为LinearLayout。Android的XML名字空间必须在XML中的组件或布局的最外层定义,这样android:tags就可以在该文件的其余部分使用:xmlns:android=千锋3G嵌入式移动互联网技术研发中心第四步创建布局为存储便笺列表,我们需要创建布局。在LinearLayout元素中添加如下代码,则整个文件看起来如下:?xmlversion=1.0encoding=utf-8?LinearLayoutxmlns:android=android:layout_width=wrap_contentandroid:layout_height=wrap_contentListViewandroid:id=@android:id/listandroid:layout_width=wrap_contentandroid:layout_height=wrap_content/TextViewandroid:id=@android:id/emptyandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=@string/no_notes//LinearLayout千锋3G嵌入式移动互联网技术研发中心在ListView和TextView标签中,其id字符串中的符号@的意思是:XML解析器要解析并扩展此id字符串@字符后的部分,并用到此ID对应的数据源。ListView和TextView可视为同一事物的两种不同视图,但一次只能显示这两者之一。当有便笺内容需要显示时就是ListView,而TextView(其默认值为仍无便笺!该值作为一个字符串资源在res/values/strings.xml文件中定义)则在没有任何便笺内容显示时显示。由于Android开发平台已默认提供了列表(list)和空ID(emptyid),所以,我们必须给id添加android:这一前缀(例如:@android:id/list)。千锋3G嵌入式移动互联网技术研发中心如果公共接口ListAdapter没有数据传递给ListView,则ListView将自动加载空id。默认为用ListAdapter查找,但这并非唯一(相应地),你可以通过对ListView调用setEmptyView(View)改变默认视图。更宽泛地说,类android.R是一个由Android平台提供给开发者的一套预定义好的资源,而开发者自己工程的资源类自己的工程名.R则是开发者自己定义的。在资源类android.R中的资源可以在XML文件中用名字空间前缀android:(正如我们通过上面的例子看到的)。千锋3G嵌入式移动互联网技术研发中心类在Eclipse工程中res/目录下的文件夹即用于存放资源。这个目录下的文件夹及文件有特定结构。该目录下的文件夹及文件中定义的资源即为R类的入口,可以让你的应用程序很方便地访问和使用这些资源。R类是通过eclipse插件调用res/下的文件夹中的内容自动生成的(或是apprt,如果你使用命令行工具的话)。此外,这些资源将作为你应用程序的一部分而绑定并部署至你的工程中。千锋3G嵌入式移动互联网技术研发中心若想在ListView中生成若干列的便笺的话,我们还需要为每一行定义一个视图:在res/
本文标题:教程记事本练习
链接地址:https://www.777doc.com/doc-3327390 .html