在“安卓编程学习第五天”中,实现了菜单项的响应。通过编辑“res->menu->main.xml”文件实现菜单项的添加,在onOptionsItemSelected()方法中通过getItemId()方法判断菜单中哪个项被选中,最终实现菜单项的响应。
在“安卓编程学习第四天”中,提到了按键响应的实现,当按下按键后,会改变TextView显示的内容。今天,将通过按键实现活动的切换,即按下按键后,从主活动切换到另外一个活动。
要实现活动的切换,首先要将新的活动加入到程序中。
1 活动的添加
将活动添加到程序中,主要包含以下三个步骤:首先添加活动对应的java文件;接下来添加活动对应的界面布局xml文件;最后在AndroidManifest.xml中对活动进行注册。
1.1 添加java文件
在“Hello_World->src->com.exmple.hello_world”上点击鼠标右键,在弹出的菜单中选择“New->Class”,如图1-1所示。
图1-1 新建Java文件
在弹出的“New Java Class”对话框中,设置新建活动的名称及父类。在“Name”项中输入名称“Second_Activiy”,在“Superclass”项中设置活动的父类,将该父类设置为Activity,可以直接输入“android.app.Activity”指定Activity类的完成名称,也可以先输入Activity,之后点击右侧的“Browse...”按键,在弹出的对话框中选择“Activity-android.app”,最后点击“Finish”按键,完成java文件的添加,如图1-2所示。
图1-2 设置活动名称及父类
其中“android.app.Activity”的含义是:android.app是一个包(package),而Activity是这个包中的一个类,而添加的Second_Activity是android.app包的Activity类的派生类。
完成以上步骤之后,就可以在左侧的“Package Explorer”中看到添加的Second_Activity的活动了,如图1-3所示。
图1-3 Second_Activity活动对应的Java文件
1.2 界面布局文件的添加
在“Hello_World->res->layout”的右键菜单中选择“New->Android XML File”,如图1-4所示。
图1-4 新建界面布局文件
在弹出的“New Android XML File”对话框中的“File”项上输入界面布局文件的名称,在此输入“secondactivity_main”,最后点击“Finish”按键,如图1-5所示。
图1-5 设置界面布局文件的名称
此时,在左侧的“Package Explorer”中看到添加的界面布局文件secondactivity_main.xml了,如图1-6所示。
图1-6 Second_Activity活动的界面布局文件
1.3 活动的注册
在AndroidManifest.xml中实现对新建活动的注册。鼠标左键双击“Hello_World->AndroidManifest.xml”,之后在右侧下方的选项卡中选择“AndroidManifest.xml”,之后在右侧上方即可以看到AndroidManifest.xml文件的内容了,如图1-7所示。
图1-7 显示AndroidManifest.xml文件的内容
在<application></application>对添加的Second_Activity活动进行注册,代码如下所示
<activityandroid:name="com.example.hello_world.Second_Activity"
android:label="第二个活动">
</activity>
其中,android:name指定了活动的名称,com.exmaple.hello_world.Second_Activity是新添加活动的完整名称;android:label表示活动的标题。
在向程序中添加完活动之后,接下来实现的功能是当按下主活动的按键时,切换到刚刚添加的活动上。
2 活动的切换
两个活动间的切换可以通过Intent类来实现。Intent描述了一个操作,包含操作的数据和操作的动作等。而在“安卓编程学习第四天”中提到,在MainActivity类的onCreate()方法中实现按键的响应,即在setOnClickListener()方法中实现。
2.1 Intent对象的创建
因此,首先在setOnClickListener()方法中使用new定义一个Intent类的对象,定义Intent类的对象需要使用到Intent类的构造函数,这个类的构造函数有很多种,其中一种的格式为
public Intent(Context packageContext,Class<?> cls)
其中,PackageContext表示使用Intent类的应用程序包的上下文;cls表示使用Intent类的组件类。
使用该构造函数,通过new关键字定义Intent类对象的代码是
Intent intent = new Intent(MainActivity.this, Second_Activity.class);
其中,MainActivity是主活动,MainActivity.this表示包的上下文;Second_Activity是刚创建的活动,Second_Activity.class表示活动的类。
2.2 Intent的启动
接下来调用Activity类的startActivity()方法启动Intent。该方法的格式为
public abstract void startActivity(Intent intent)
其中,参数intent表示要启动的Intent。使用startActivity()方法启动Intent的代码为
startActivity(intent);
在模拟设备中运行该代码,当点击主活动的按键时,会切换到添加的第二个活动上去,如图2-1所示。
图2-1 切换到第二个活动
从第二个活动切换到主活动时,只需要点击模拟设备右侧的“返回”按键即可。
3 小结
今天学习了两个活动之间的切换。首先完成活动的添加,是通过三个步骤实现的,分别是添加活动对应的java文件;添加活动对应的界面布局xml文件;在AndroidManifest.xml中对活动进行注册。接下来在MainActivity类的onCreate()方法中实现按键的响应,即在setOnClickListener()方法中完成对Intent类对象的创建和启动。当点击了主活动中的按键时,会切换到添加的活动,而点击模拟设备右侧的“返回”按键,即可实现从添加的活动切换回主活动。