Android编程权威指南(第二版)第五章-第二个activity(activity之间的切换)
新建一个activity时,记得在manifest配置文件中声明这样操作系统才能够使用它们。
在<application>标签里面<activity android:name=".你的activity的name"> </activity>
.你的activity的name,表示这个activity在当前的包名路径下。
如果使用没有在配置文件中声明的activity,程序执行会抛出ActivityNotFoundException异常
POINT 1.启动activity
一个activity启动另一个activity最简单的方式是使用以下startActivity方法:
public void startActivity(Intent intent)
启动activity不是调用activity子类的方法,activity调用startActivity方法时,调用请求实际发给了操作系统。准确地说,调用请求发送给了操作系统的ActivityManager。 ActivityManager负责创建Activity实例并调用其onCreate(...)方法。 activity的启动示意图如图所示。

ActivityManager该启动哪个Activity呢?答案就在于传入startActivity(...)方法的Intent参数。
显示intent:Intent构造方法
public Intent(Context packageContext, Class<?> cls)
传入该方法的Class类型参数告诉ActivityManager应该启动哪个activity; Context参数告诉ActivityManager在哪里可以找到它。通过指定Context与Class对象,然后调用intent的构造方法来创建Intent,则创建的是显
式intent。在同一应用中,我们使用显式intent来启动activity。
一个应用的activity如需启动另一个应用的activity,可通过创建隐式intent来处理。稍后补充
POINT 2.activity之间的数据传递
一般在activity进行切换时,我们需要传递一些信息,在Android中我们可以使用 intent extra
extra也是一种键值结构,要将extra数据信息添加给intent,需要调用Intent.putExtra(...)方法。确切地说,是调用如下方法:(包名修饰extra键,避免重复)
public Intent putExtra(String name, boolean value)
Intent.putExtra(...)方法形式多变。不变的是,它总是有两个参数。一个参数是固定为String类型的键,另一个参数值可以是多种数据类型。该方法返回intent自身,因此,需要时可进行链式调用。最好创建一个newIntent方法,将要传的信息传给newIntent,由newIntent创建Intent实例并返回。
得到Intent中传递的值:(红色的随值的类型而变)
值存储的变量=getIntent().getBooleanExtra(键, false);
Activity.getIntent() 方 法 返 回 了 由 startActivity(Intent)方法转发的Intent对象。false表示预设默认值
那么我们需要从子activity 获取返回结果可调用以下Activity方法:(替换startActivity方法)
public void startActivityForResult(Intent intent, int requestCode)
该方法的第一个参数同前述的intent。第二个参数是请求代码。 请求代码是先发送给子activity,然后再返回给父activity的用户定义整数值。当一个activity启动多个不同类型的子activity,且需要判断区分消息回馈方时,通常会用到该请求代码。
子activity返回结果,有两种方法可供调用:
public final void setResult(int resultCode)
public final void setResult(int resultCode, Intent data)
//预定义的常量有Activity.RESULT_OK;Activity.RESULT_CANCELED
开发者也可以自己定义返回结果代码,这对父activity需要根据子activity的操作结果进行不同的操作时非常有用
子activity可以不调用setResult(...)方法,操作系统发送默认的结果代码,用户单击了后退按钮,父activity则会收到Activity.RESULT_CANCELED的结果代码
子activity返回时,会调用父activity的以下方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
需要对返回结果处理就可以重写这个方法,进行处理
总的流程如下图:


浙公网安备 33010602011771号