您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Android学习资料之记事本应用程序开发练习2
嵌入式移动互联网技术研发培训中心概述:记事本应用程序开发练习第一步记事本应用程序开发练习第二步记事本应用程序开发练习第三步记事本应用程序开发练习第四步开始其它Activities记事本应用程序开发练习第五步第六步第七步布局的艺术第八步第九步第十步第十一步至关重要的AndroidManifest文件第十二步答案和下一步的学习计划嵌入式移动互联网技术研发培训中心在本练习中,你将学习如何添加第二个Activity至你的记事本应用程序中,该Activity可以让用户创建、编辑以及删除便笺。这个Activity假定通过用户的输入响应创建新便笺,并将其自身打包至一个由intent提供的Bundle返回值中。这个练习的目标是:构建一个新Activity并将其添加至Androidmanifest中通过异步调用方法startActivityForResult()来调用另一Activity用诸多Bundle对象在Activity之间传递数据如何使用一个更高级的屏幕布局嵌入式移动互联网技术研发培训中心用NotepadCodeLab文件夹下Notepadv2目录里的资源创建一个新Android工程,正如与练习一中做过类似的一样。如果你看到一个有关AndroidManifest.xml,或有关android.zip文件的错误信息,请右击工程选择AndroidToolsFixProjectProperties,即可修正错误。打开Notepadv2工程并查看如下内容:打开并查看res/values路径下的strings.xml文件——里面有若干我们将要用于新功能的新字符串同时,打开并查看Notepadv2这个类的顶部,你将会注意到一个用于存放我们即将用到的新字段,指针mNotesCursor,其下已定义了几个新常量。嵌入式移动互联网技术研发培训中心还需注意的是方法fillData()已多了一些注释,并且现在用新定义的字段存储便笺指针。本练习中的方法onCreate()与练习一中的声明和实现相比并无变化。另需留意的是用于存储便笺指针的类成员变量叫做mNotesCursor。首字母m已表明该变量为一成员变量并符合Android编码风格标准。接下来还有几个我们将要实现的新覆写接口(onListItemClick()和onActivityResult())。嵌入式移动互联网技术研发培训中心添加一个删除一条便笺的菜单项:在接口onCreateOptionsMenu()中,添加如下一行代码:menu.add(0,DELETE_ID,0,R.string.menu_delete);该接口的完整定义如下:@OverridepublicbooleanonCreateOptionsMenu(Menumenu){super.onCreateOptionsMenu(menu);menu.add(0,INSERT_ID,0,R.string.menu_insert);menu.add(0,DELETE_ID,0,R.string.menu_delete);returntrue;}嵌入式移动互联网技术研发培训中心在接口onMenuItemSelected()中,为参数DELETE_ID添加一个新分支语句:mDbHelper.deleteNote(getListView().getSelectedItemId());fillData();returntrue;这里,我们通过接口deleteNote()删除指定ID的便笺。为了得到指定便笺的ID,我们调用接口getListView().getSelectedItemId().接下来,我们会调用接口fillData()以保持数据的更新.接口onMenuItemSelected()的完整定义如下:嵌入式移动互联网技术研发培训中心@OverridepublicbooleanonMenuItemSelected(intfeatureId,MenuItemitem){switch(item.getItemId()){caseINSERT_ID:createNote();returntrue;caseDELETE_ID:mDbHelper.deleteNote(getListView().getSelectedItemId());fillData();returntrue;}returnsuper.onMenuItemSelected(featureId,item);}嵌入式移动互联网技术研发培训中心在本例中,我们的intent用了一个特定名称的类。我们也可以创建Intents而不必清楚地知道控制此Intent的应用程序究竟是哪个,因为正如我们对类中的startingintents所了解的那样,该类既可以在我们自己的应用程序中也可以在另一应用程序中。例如,我们可能想打开一个浏览器中的一个页面,这里我们仍将用到一个Intent。但是我们用一个预先定义好的Intent常量和一个用于描述我们目的的URI内容,而非某一特定的类,来控制此Intent。嵌入式移动互联网技术研发培训中心实现接口createNote():为创建一个便笺(ACTIVITY_CREATE)而用一个名为NoteEdit的类创建一个新Intent。紧接着调用接口startActivityForResult()来启动该Intent。:Intenti=newIntent(this,NoteEdit.class);startActivityForResult(i,ACTIVITY_CREATE);这种形式的Intent调用是面向我们Activity中特定类的,本例中该特定类即为NoteEdit。由于Intent类需要通过Android操作系统来发送请求信息,我们还得提供一个Context(this)。嵌入式移动互联网技术研发培训中心触发该Intent的接口startActivityForResult()是在一个新Activity完成后,才在我们的Activity中被调用的。在我们的Activity中用于接收回调的接口名为onActivityResult(),我们将在稍后的步骤中实现它。另一调用Activity的接口名为startActivity(),但这是一种一劳永逸的调用方式(fire-and-forget)——在该调用方式下,当前的Activity并不会收到另一Activity已完成的通知,同时我们无法从被调Activity的接口startActivity()返回有关该Activity的任何结果信息。不必担心NoteEdit目前还不存在这一事实,我们很快就将完善之。嵌入式移动互联网技术研发培训中心实现覆写接口onListItemClick():onListItemClick()是一个我们将要覆写的回调函数。它在用户点击便笺列表中的某一项时调用。它一共有四个参数,分别是:调用该接口的ListView对象,所点击的View(存在于ListView中),所点击的position(该项在列表中的位置),所点击的某一项的行索引(mRowId)。在本例中我们先忽略前两个参数(当前我们只可能有一个ListView),以及参数行索引。我们的着眼点全在用户所选中的某一项在列表中所在的位置position。通过这个参数,我们可以从相应的行得到想要的数据,并将此数据打包发送至NoteEditActivity。嵌入式移动互联网技术研发培训中心在该回调函数接口的实现中,我们用类NoteEdit创建一个Intent来修改便笺内容,接着添加数据至一个作为参数传递给被调用Activity的Intent的附加包中。我们用其传递当前正在编辑的便笺的标题、正文以及行索引。最后,它将调用接口startActivityForResult()来启动该Intent。以下是接口onListItemClick()实现的完整代码:super.onListItemClick(l,v,position,id);Cursorc=mNotesCursor;c.moveToPosition(position);Intenti=newIntent(this,NoteEdit.class);嵌入式移动互联网技术研发培训中心i.putExtra(NotesDbAdapter.KEY_ROWID,id);i.putExtra(NotesDbAdapter.KEY_TITLE,c.getString(c.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));i.putExtra(NotesDbAdapter.KEY_BODY,c.getString(c.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));startActivityForResult(i,ACTIVITY_EDIT);putExtra()是一个为触发Intent而添加数据至附加包中的接口。这里,我们用包传递我们想编辑的便笺内容的标题、正文以及行索引。嵌入式移动互联网技术研发培训中心当我们定位到所选择的对象所在列表中的相应位置时,通过接口moveToPosition(),有关该便笺的细节信息尽在查询指针中。通过添加到Intent的附加信息,及接口startActivityForResult(),我们在类NoteEdit中触发该Intent及请求类型码(请求类型码将作为参数requestCode返回给接口onActivityResult())。注意:我们在接口定义的开始处就将类成员变量mNotesCursor赋给一个局部变量。这可视为对Android应用程序代码的优化。因为访问一个局部变量其效率远高于访问Dalvik虚拟机中的一个类成员变量。所以通过这种方式处理,我们只需访问类成员变量一次,而访问局部变量五次,就可使得常规处理更高效。所以极力推荐尽可能用此方法优化你的Android应用程序代码。嵌入式移动互联网技术研发培训中心上述接口createNote()和onListItemClick()采用的是异步触发Intent的方式。我们得靠一个句柄来回调,所以以下是接口onActivityResult()的实现部分:onActivityResult()是一个只在一个Activity有返回结果时才被调用的覆写接口(记住!一个Activity只有在用接口
本文标题:Android学习资料之记事本应用程序开发练习2
链接地址:https://www.777doc.com/doc-4212805 .html