阅读内容:Tutorial:Notepad Exercise 1;Exercise 2;Exercise 3;Extra Credit
因为临时任务出差了几天,这部分内容一直没有时间来更新,本打算看完了实践了以后再来总结的,可是做到一半就被迫停止了,回来以后,以前的也忘的差不错了。以前写到一半的文档,也被同事当作垃圾删掉了...呵呵,只好重新来过...
这个例子,我做起来其实并不是很顺利,中间遇到不少的问题。主要是,这个这个Android的EclipsePlugin多多少少还是有些Bug,导致很多时候很麻烦,不知道各位是否有好的解决办法。
Notepad这个例子我不想在这里一步一步的重复了,记录一些主要的点完事。完整的代码可以参考,Android Demo里面的Notepad。
分下面两个部分:
第一部分:主要知识点
1.界面布局
看个复杂的好了。界面布局Android推荐使用XML来配置完成。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title" />
<EditText id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/body" />
<EditText id="@+id/body" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scrollbars="vertical" />
<Button id="@+id/confirm"
android:text="@string/confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
这段配置描述的界面如右图中所示.
需要注意的点是:
1.layout可以出现嵌套的,这样可以部署更加复杂的界面.
2.可以通过@string/confirm来引用/res/string.xml中confirm的值.
3.id=@+id/confirm 这里的@表示当XML解析器解析到这个id时,会通过这个id来配置相关的资源。在代码中这样体现,
Button confirmButton = (Button) findViewById(R.id.confirm);通过R.id.confirm来配置这个Button。
而如果在@后面在来一个+的话,类似与正则表达式的味道,标识至少有一个id表示的资源,如果没有那就知道生成一个了。
当然单单定义这个界面是不管用的,还必须通知Android知道才可以,在AndroidManifest.xml中配置一下就可以了。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.android.demo.notepad3"> <application android:icon="@drawable/icon"> ... <activity class=".NoteEdit" android:label="@string/edit_note"> </activity> </application> </manifest>
这是界面的一部分,还有一部分,不如说菜单要如何实现呢?看这里就明白了
private static final int INSERT_ID = Menu.FIRST;
private static final int DELETE_ID = Menu.FIRST + 1;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, INSERT_ID, R.string.menu_insert);
menu.add(0, DELETE_ID, R.string.menu_delete);
return true;
}
有个问题,还没有解决掉。菜单项的顺序是Menu.FIRST来决定呢?还是安装Add的顺序来决定呢?
2.界面迁移与信息交互
应用软件中少不了在各种界面间辗转腾挪,Android中给给我们提供了一套完整的机制来保证我们可以这样做。不太了解的可以看看《通读Android文档系列 FOUR》
具体看看它是如何实现的吧。形象一点来表达吧,四步走。
第一步:定义Intent
Intent i = new Intent(this, NoteEdit.class);
第二步:并装载信息,如果没有信息自然可以省去。
i.putExtra(KEY_ROW_ID, rows.get(position).rowId);
第三步:发送
startSubActivity(i, ACTIVITY_EDIT);
这样就进入了子界面的生命周期中,子界面首先触发的会是onCreate方法.
我想记下的如何获取Intent中装载的信息,代码如下
Bundle extras = getIntent().getExtras();
rowId = extras != null ? extras.getLong(Notepadv3.KEY_ROW_ID) : null;
界面迁移就到这里吧。
3.事件处理
接下来是事件处理,这个现对简单事件也不多。
1.菜单项选择事件,Activity里面已经定义好了,实现相关方法即可。
@Override
public boolean onMenuItemSelected(int featureId, Item item) {
boolean result=super.onMenuItemSelected(featureId, item);
...
return result;
}
2.选择列表项事件,ListActivity里面也有现成的方法,实现即可
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
...
}
3.添加记录的确定按钮,这个需要自定义了,不过和Swing,Awt里面基本上是一致的。
Button confirmButton = (Button) findViewById(R.id.confirm);
confirmButton.setOnClickListener(
new View.OnClickListener() {
public void onClick(View arg0) {
setResult(RESULT_OK);
finish();
}
});
4.Android的生命周期事件
说明这个问题还是引入那个图的好,
这样就一目了然了,Notepad中做的只不过是为了让我们切实体验一下罢了.
5.信息存储(SQLite)
Android给我们提供了android.database以及android.database.sqllite两个包。这中间包括了基本上所有的信息存储方面的操作。
这部分的内容,凡做个数据库开发的一目了然的事情。不需多说。Android已经为我们封装的相当到位了。多多了解和熟悉API即可使用.
第二部分,遇到的问题
1.应用程序修改后不会自动更新
这个问题处理方法有2个,分别是:
解决方法1(推荐使用)
通过Android Tools里面的Export Application Package工具导出*.apk.利用命令行工具adb install 和adb shell/rm 来部署和卸载*.apk文件。这样来更新。
解决方法2:
通过删除userdata.img文件来更新。可以参考这里初体验Android的两个小不爽
不过这样的话,模拟器中所有的数据全部会被清除掉,所以不推荐.
如果经常开发Android的话,把这些操作扩展到ant里面,会是一个不错的选择。
其他还想了解的内容:
1.Common Android Tasks
2.更完整的Notepad的例子
最后提供一个Notepad的源代码,可以在这里下载
平凡而简单的人一个,无权无势也无牵无挂。一路厮杀,只进不退,死而后已,岂不爽哉!
收起对“车”日行千里的羡慕;收起对“马”左右逢缘的感叹;目标记在心里面,向前进。一次一步,一步一脚印,跬步千里。
这个角色很适合现在的我。