示例:
(来源于 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 传递的信息做判断,进行下一步操作。