Android APP开发 —— 启动另1个Activity

0 前言

    本文在《Android开发第2-1课:启动一个Activity》的基础上,介绍在Activity中如何通过Intent启动另一个Activity。

TODO:本文基于Eclipse IDE而作,后续更新为使用Android Studio。

1 切换按钮

    增加一个按钮,点击该按钮就切换到另一个Activity。为了响应按键的点击事件,打开activity_main.xml布局文件并且添加android:onClick 属性到<Button> 元素中:

图1.1

    上图"sendMessage"就是按键回调函数名,须在MainActivity 类中实现该回调函数:

图1.2

.java文件中的按键处理函数名必须和.xml文件中的onClick属性的值一致,而且,按键处理函数必须满足以下条件:

  • 属于公有函数
  • 有一个void型的返回值
  • 有且只有一个 View 参数 (这就是将被点击的View )

接下来,你将会填充这个函数来读取文本编辑区的内容,并且将它发送到另外一个activity。

2 新建Activity

    Eclipse工具栏中,依次"New  > Android Activity > Next > BlankActivity > Next“,填写新建activity的详细信息,然后点击“Finish”即可:

图2.1 The new activity wizard in Eclipse.

    新建文件的部分截图如下:

图2.2

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,你需要自己添加清单入口,如下所示:

图2.3

 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的向导。

图2.4

如果你使用Eclipse进行开发,你现在可以运行你的app了。但是没有太多效果。点击Send按键启动第二个activity,但是它使用模版提供的默认的 "Hello world"布局。你将会更新这个activity来显示定制的内容,所以如果你使用不同的IDE也不要担心这个app编译不过。

3 启动新Activity

3.1 Intent

    一个 Intent 就是一个对象,提供在运行时绑定分开的组件的服务(例如两个activity)。 这个 Intent 代表一个app "意图做某事" 。你可以使用intent来实现各种任务,但通常情况下它被用于启动另外一个 activity。

    在sendMessage()函数内创建一个 Intent 来启动第2节新增的DisplayMessageActivity

图3.1

这里的构造函数使用了两个参数:

  • 一个 Context 作为第一参数(因为Activity 类是Context 的一个子类)
  • 系统将要递送Intent到的app组件的类 (这时activity应该已经启动)\
  • Intent 可指定明确的目标app组件,也可不指定,此时则是隐含的,只要满足元数据规则,设备上的所有app都会响应这个intent。

    一个intent不仅允许你启动另外一个activity,而且可以将大量信息携带给这个activity。 在sendMessage()方法里面,使用findViewById() 去获取EditText 元素和它的文本到当前的intent中:

图3.2

    一个Intent 可以携带许多数据类型作为关键值对,叫做extras。 这个putExtra() 方法的第一参数是使用关键名字,第二个方法是其值。

    为了使得下一个activity可以查询extra数据,你应该用一个公共常量来定义你的extra的key。所以在MainActivity类的顶部添加EXTRA_MESSAGE的定义:

图3.3

用你的app包的名字的前缀来为你的intent extras定义key是一个很好的习惯。这保证了当你的app和其它app交互时,它们是独一无二的。

3.2 启动新Activity

    为了启动一个activity, 调用 startActivity()并且传递你的Intent,系统接受这个调用并且启动一个Intent定义的Activity 实例:

图3.4

3.3 接收Intent

    每个 Activity都被一个Intent 调用, 不管用户如何操作。你可以在启动activity的时候通过调用getIntent()获得Intent ,然后查询里面的数据:

图3.5

3.4 显示信息

    为了在屏幕上现世信息,创建一个 TextView 窗体并且使用setText()设置文本。 然后添加TextView ,并且通过将其传递给setContentView()使其作为当前activity布局的根视图。

    DisplayMessageActivity的完整的onCreate()方法如下所示:

图3.6

4 运行效果

    运行这个app,在本文编辑框中输入信息,然后点击发送,你就可以看到信息显示在第二个activity中:

图4.1 Both activities in the final app, runningon Android 4.0.

参考资料

[1]TODO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OneSea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值