Android入门开发指南之七 -- 指南:Notepad 练习1 (下)
来源:互联网 发布:澳门打车软件 编辑:程序博客网 时间:2024/05/22 17:01
第9步
在onCreate()方法中添加代码。
这里我们将设置activity的标题(显示在屏幕顶端),使用notepad_list布局,我们为activity创建显示内容,建立DBHelper实例用来访问数据,然后将可显示的文本标题和列表关联起来。
a. 调用super()带icicle参数,传入到我们的方法中。
b. 在R.layout.notepad_list中调用setContentView。
c. 为类DBHelper创建一个新的名为dbHelper的私有类成员(放在onCreate方法之前)。
d. 在onCreate方法后面,构造一个DBHelper实例,并分配dbHelper成员(注意:你必须传递this引用到DBHelper的构造函数中)。
e. 最后,调用一个新的方法fillData()-获取数据平且使用helper进行关联,我们在这里还没有定义它。
f. onCreate()现在看起来应该像这个样子:
g. @Override
h. public void onCreate(Bundle icicle)
i. {
j. super.onCreate(icicle);
k. setContentView(R.layout.notepad_list);
l. dbHelper = new DBHelper(this);
m. fillData();
n. }
同时记住添加DBHelper成员定义(在NoteNumber定义中)。
private DBHelper dbHelper;
第10步
更多菜单内容
我们构建的Notepad应用仅仅触及到菜单的表面。你还可以为你的菜单添加菜单项,创建子菜单甚至是添加菜单项到其它应用中。
在onCreateOptionsMenu()函数体中填入代码。
我们将只添加一个菜单项,”Add Item”,使用我们在string.xml中创建,使用一个常量定义的字符创。我们将创建在类的顶部,用来标识添加菜单项的操作。
a. 在strings.xml资源中(在res/valuse目录下),为menu_insert添加一个新的字符串,文本为”Add Item”,<string name="menu_insert">Add Item</string>,然后保存这个文件。
b. 同样,你需要一个菜单位置长廊,在Notepadv1类的顶部(刚好在KEY_BODY定义下面)
public static final int INSERT_ID = Menu.FIRST;
c. 在方法onCreateOptionsMenu()中,添加菜单项。同样注意super调用返回的结果,整个完成之后的方法看上去应该像这个样子:
d. @Override
e. public boolean onCreateOptionsMenu(Menu menu) {
f. boolean result = super.onCreateOptionsMenu(menu);
g. menu.add(0, INSERT_ID, R.string.menu_insert);
h. return result;
i. }
第11步
在onOptionsItemSelected()方法中添加代码:
这个方法用来处理我们新的”Add Note”菜单项的选择动作。当这个选中的方法调用item.getID()获得的值为INSERT_ID(我们用来标识菜单项)时,我们可以检测到用户选择菜单动作,并且执行适当的处理。
a. super.onOptionsItemSelected(item)方法在这个函数结尾运行-我们希望能够首先捕获我们的事件。
b. 返回值上的Switch语句
c. case INSERT_ID:
d. 调用方法createNote()
e. 在case语句结束处添加break;
f. 在函数末尾返回superclass onOptionsItemSelected()的返回值。
g. 现在整个onOptionsItemSelect()函数看起来像这个样子:
h. @Override
i. public boolean onOptionsItemSelected(Item item) {
j. switch (item.getId()) {
k. case INSERT_ID:
l. createNote();
m. break;
n. }
o.
p. return super.onOptionsItemSelected(item);
q. }
第12步
添加一个新的createNote()方法 :
在应用程序的第一版中,createNote()不是非常有用.我们将简单创建一个带标题的文本,标题基于一个计数器(“Note1”,”Note2”),文本正文为空。现在我们还没有办法编辑文本内容,所以现在我们将创建一个带默认值的文本。
a. 字符串 noteName = “Note” + noteNumber++; (使用”Note”和我们在类里面定义得计数器构造名字);
b. 使用noteName作为标题,空字符””作为正文调用函数dbHelper.createRow()
c. Call fillData() method again after adding (inefficient but simple)
d. The whole createNote() method should look like this:
e. private void createNote() {
f. String noteName = "Note " + noteNumber++;
g. dbHelper.createRow(noteName, "");
h. fillData();
i. }
第13步
列表适配器
我们例子使用了一个简单的数组适配器,它将一个数组或者列表元素绑定到一个ListView,在Android中更通用的做法是,列表适配器和ContentPorvider一起工作,这也是一个使用列表的非常简单的方法。
绑定一个ContentProvider到一个ListView,你可以使用一个android.widget.SimpleCuresorAdapter来绑定contertProvider中提供的数据到ListView。
定义fillData方法,这个过程相对长一点:
这个方法使用ArrayAdapter,它是最简单的将数据导入ListView中的方法。ArrayAdapter不仅获取一个列表或者字符串数组,还把它们绑定到一个文本视图中,这个视图在布局中定义为列表行(这个就是我们的notes_row.xml布局中的text1域)。这个方法简单的从helper数据库中获取一列文本,使用每一行的文本标题构造一个字符串列表,然后在这些列表项之上创建一个ArrayAdapter,然后绑定我们定义的notes_row.( The method simply obtains a list of notes from the database helper, constructs a List of Strings using the title strings from each row, and then creates an ArrayAdapter out of those items and bound to use the notes_row we defined.没有完全理解)。
private void fillData() {
// We need a list of strings for the list items
List<String> items = new ArrayList<String>();
// Get all of the rows from the database and create the item list
List<Row> rows = dbHelper.fetchAllRows();
for (Row row : rows) {
items.add(row.title);
}
// Now create an array adapter and set it to display using our row
ArrayAdapter<String> notes =
new ArrayAdapter<String>(this, R.layout.notes_row, items);
setListAdapter(notes);
}
a. ArrayAdapter需要一个字符串列表(List<String>),包含要显示的项。
b. 数据从数据库中一行行读出,每一行的标题域构成列表字符串。
c. 我们指定我们创建的notes_row视图作为数据容器。
d. 如果你发现没有报告过的类错误,你可以按组合键ctrl-shift-O(在Mac 上是cmd-shift-O)生成错误报告。
注意:在这个联系中,我们使用了一个ArrayAdapter,这并不是一个通用的做法,更典型的做法是,使用一个SimpleCursorAdapter和ContentProvider,或者至少从一次查询中返回一个Cursor,查看List Adapters上的工具条获取更多的信息。
第14步
运行程序!
a. 在工程Notepadv1上右击
b. 从弹出菜单中选择 Run As -> Android Application
c. 如果你看到一个对话框弹出来,选择Android启动器作为运行应用程序的方法(你也可以使用对话框顶部的链接作为你的工作区的默认值,这是推荐使用的,因为它可以组织插件每次运行时等询问)。
d. 点击菜单按钮,从菜单中选择”Add item”添加新的文本。
解决方案以及下一步
你可以拿你自己的实现方法与zip文件中Notepadv1Solution的类实现办法作比较,一旦你完全掌握,让我们进入指南练习2中,添加创建,编辑和删除文本的功能。
返回指南主页进入下一个练习。
- Android入门开发指南之七 -- 指南:Notepad 练习1 (下)
- Android入门开发指南之七 -- 指南:Notepad 练习1 (上)
- SWT/JFace开发入门指南(七)
- SWT/JFace开发入门指南(七)
- Android 入门开发指南之四 -- Hello,Android例子(下)
- Android入门开发指南之六 -- 指南:一个记事本应用程序
- Android 入门开发指南之二 -- Eclipse环境下安装开发
- Android 入门开发指南之三 -- 在其他平台下开发
- Android源代码开发入门指南
- ant入门指南—web前端开发七武器(1)
- web前端开发七武器—ant入门指南(1)
- 《Python3程序开发指南(第二版)》第1章 过程型程序设计快速入门 练习
- Android 入门开发指南之五—分析应用程序
- Hexo 入门指南(七) - 评论 & 分享
- JavaScript入门指南---(七)、JSON相关
- Android 入门开发指南之四 -- Hello,Android例子(上)
- Android开发指南之MediaPlayer
- jBPM开发入门指南(1)
- 帐号管理
- remote access between two linuxs
- samba服务
- Tcpdump命令详解
- samba 安装与配置
- Android入门开发指南之七 -- 指南:Notepad 练习1 (下)
- 旧话重提--关于程序员创业[原创]
- 归档命令介绍.
- 如何写makefile
- 利用rpm安装实用程序安装rpm包
- linux常用命令
- 这两天的问题
- C++ Internals: VC RTTI - 基本数据结构
- Endnote 教程 http://lib.ict.ac.cn/EndNote/endnote%E6%95%99%E7%A8%8B.pdf