Android: Activity间的数据传递

示例:

Android: Activity间的数据传递

(来源于 Android 编程权威指南第3版)

背景:两个活动,一个是 Quiz 活动,另一个是 Cheat 活动。

题目答案从 Quiz 活动传递给 Cheat 活动,再把用户是否作弊的信息传递给 Quiz 活动。

1.首先我们位于 Quiz 活动,想点击作弊按钮,启动 Cheat 活动。但是在此之前,先创建一个 Intent,Intent 用于活动的交互(四大组件都可以用它来交流的)。Intent 用来告诉 ActivityManager 该启动哪个活动,构造方法为:

Intent Intent(Context packageContext, Class<?> cls)

传入该方法的 Class 类型参数告诉 ActivityManager 应该启动哪个活动;Context 参数告诉 ActivityManager 在哪里可以找到它。简单一点说前者是父活动,后者是子活动。

2.我们需要在 Intent 上放参数,调用

Intent.putExtra(String name, boolean value)

第一个参数是一个字符串,第二个参数是一个布尔型(这里可以换成其他类型)。我们可以看做 Intent 是个 Map,里面存放着键-值对这样的数据,之后调用

void startActivityForResult(Intent intent, int requestCode)

把 Intent 发出去,第一个参数是 Intent 类,第二个参数是 int 类型的 requestcode,Intent 就用之前创建的,而 requestcode 是用来标识是从哪个活动回来的(取值大于等于零),它会被丢到子活动中,之后又从子活动中返回。

3.现在到了子活动,我们需要把用户是否作弊的信息发回去。有两种方法:

public final void setResult(int resultCode)

public final void setResult(int resultCode, Intent data)

resultCode有以下常量:

Activity.RESULT_OK

Activity.RESULT_CANCELED (如需自己定义结果代码,还可使用另一个常量:RESULT_FIRST_USER

如果用户按的是导航栏上的返回键则会返回 Activity.RESULT_CANCELED

我和书上都用了第二种方法,仔细想想第一种就行。照葫芦画瓢,把信息都用 putExtra 丢到 Intent 上。

4.回到父活动,父活动调用

protected void onActivityResult(int requestCode, int resultCode, Intent data)

再根据自己用 resultCode 还是 Intent 传递的信息做判断,进行下一步操作。