posts - 110,  comments - 152,  trackbacks - 0

阅读内容:Tutorial:Notepad Exercise 1Exercise 2Exercise 3Extra Credit 

 

因为临时任务出差了几天,这部分内容一直没有时间来更新,本打算看完了实践了以后再来总结的,可是做到一半就被迫停止了,回来以后,以前的也忘的差不错了。以前写到一半的文档,也被同事当作垃圾删掉了...呵呵,只好重新来过...

这个例子,我做起来其实并不是很顺利,中间遇到不少的问题。主要是,这个这个Android的EclipsePlugin多多少少还是有些Bug,导致很多时候很麻烦,不知道各位是否有好的解决办法。

Notepad这个例子我不想在这里一步一步的重复了,记录一些主要的点完事。完整的代码可以参考,Android Demo里面的Notepad。

分下面两个部分:

第一部分:主要知识点

1.界面布局
   看个复杂的好了。界面布局Android推荐使用XML来配置完成。jiemian

<?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的生命周期事件

说明这个问题还是引入那个图的好,

activity_lifecycle

这样就一目了然了,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的源代码,可以在这里下载



平凡而简单的人一个,无权无势也无牵无挂。一路厮杀,只进不退,死而后已,岂不爽哉!
收起对“车”日行千里的羡慕;收起对“马”左右逢缘的感叹;目标记在心里面,向前进。一次一步,一步一脚印,跬步千里。
这个角色很适合现在的


posted on 2007-12-12 17:25 过河卒 阅读(1697) 评论(4)  编辑  收藏 所属分类: Android/gPhone

只有注册用户登录后才能发表评论。


网站导航:
 
文章来自: http://www.blogjava.com/ponzmd/ (彭俊-过河卒) 转贴请声明!
访问统计: