0 前言
本文在《Android开发第2-1课:启动一个Activity》的基础上,介绍在Activity中如何通过Intent启动另一个Activity。
TODO:本文基于Eclipse IDE而作,后续更新为使用Android Studio。
1 切换按钮
增加一个按钮,点击该按钮就切换到另一个Activity。为了响应按键的点击事件,打开activity_main.xml布局文件并且添加
android:onClick
属性到<Button>
元素中:
上图"sendMessage"
就是按键回调函数名,须在MainActivity
类中实现该回调函数:
.java文件中的按键处理函数名必须和.xml文件中的onClick属性的值一致,而且,按键处理函数必须满足以下条件:
- 属于公有函数
- 有一个void型的返回值
- 有且只有一个
View
参数 (这就是将被点击的View
)
接下来,你将会填充这个函数来读取文本编辑区的内容,并且将它发送到另外一个activity。
2 新建Activity
Eclipse工具栏中,依次"New > Android Activity > Next > BlankActivity > Next“,填写新建activity的详细信息,然后点击“Finish”即可:
新建文件的部分截图如下:
2.1 添加标题字符串
如果你使用Eclipse,你可以跳到下一小节,因为模版已经为新的activity提供了标题字符串。
如果你使用的是其他IDE,添加如下标题到strings.xml
文件中:
<resources> ... <string name="title_activity_display_message">My Message</string> </resources>
添加到清单
所有的activities必须在你的清单文件AndroidManifest.xml
中使用一个<activity>
元素来声明。
当你使用Eclipse工具来创建activity,它创建一个默认的入口。如果使用不同的IDE,你需要自己添加清单入口,如下所示:
android:parentActivityName
属性声明了这个activity的父activity的名字。 系统使用这个值来实现默认的导航行为,例如Android 4.1 (API level 16)或者更高版本中的Up navigation 。你可以使用 Support Library 并且添加如上所示的 <meta-data>
元素来为一些旧版本的Android提供导航。
注意: 你的 Android SDK 应该已经包含了最新的Android支持库。 它已经包含在ADT绑定包里面,但是如果你使用其他IDE,你应该在Adding Platforms and Packages 中安装他它。当你使用Eclipse中的模版,支持库自动的添加到你的app工程中(你可以在Android的依赖关系中看到库的JAR文件)如下图所示。如你不使用Eclipse,你需要手动添加这个库到你的工程中—按照setting up the Support Library的向导。
如果你使用Eclipse进行开发,你现在可以运行你的app了。但是没有太多效果。点击Send按键启动第二个activity,但是它使用模版提供的默认的 "Hello world"布局。你将会更新这个activity来显示定制的内容,所以如果你使用不同的IDE也不要担心这个app编译不过。
3 启动新Activity
3.1 Intent
一个Intent
就是一个对象,提供在运行时绑定分开的组件的服务(例如两个activity)。 这个
Intent
代表一个app "意图做某事" 。你可以使用intent来实现各种任务,但通常情况下它被用于启动另外一个 activity。
在sendMessage()函数内
创建一个 Intent
来启动第2节新增的DisplayMessageActivity
:
这里的构造函数使用了两个参数:
- 一个
Context
作为第一参数(因为
Activity
类是Context
的一个子类) - 系统将要递送
Intent
到的app组件的类 (这时activity应该已经启动)\ Intent
可指定明确的目标app组件,也可不指定,此时则是隐含的,只要满足元数据规则,设备上的所有app都会响应这个intent。
一个intent不仅允许你启动另外一个activity,而且可以将大量信息携带给这个activity。 在sendMessage()方法里面,使用
findViewById()
去获取EditText
元素和它的文本到当前的intent中:
一个Intent
可以携带许多数据类型作为关键值对,叫做extras。 这个putExtra()
方法的第一参数是使用关键名字,第二个方法是其值。
为了使得下一个activity可以查询extra数据,你应该用一个公共常量来定义你的extra的key。所以在MainActivit
y类的顶部添加EXTRA_MESSAGE
的定义:
用你的app包的名字的前缀来为你的intent extras定义key是一个很好的习惯。这保证了当你的app和其它app交互时,它们是独一无二的。
3.2 启动新Activity
为了启动一个activity, 调用 startActivity()
并且传递你的Intent
,系统接受这个调用并且启动一个Intent
定义的Activity
实例:
3.3 接收Intent
每个 Activity
都被一个Intent
调用, 不管用户如何操作。你可以在启动activity的时候通过调用getIntent()
获得Intent
,然后查询里面的数据:
3.4 显示信息
为了在屏幕上现世信息,创建一个 TextView
窗体并且使用setText()
设置文本。 然后添加TextView
,并且通过将其传递给setContentView()
使其作为当前activity布局的根视图。
DisplayMessageActivity
的完整的onCreate()
方法如下所示:
4 运行效果
运行这个app,在本文编辑框中输入信息,然后点击发送,你就可以看到信息显示在第二个activity中:
参考资料
[1]TODO