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)

需要对返回结果处理就可以重写这个方法,进行处理

总的流程如下图:

 

posted @ 2017-03-08 18:25  HeLing_CC  阅读(96)  评论(0)    收藏  举报