您的位置:首页 > 移动开发 > Android开发

Android初级开发第八讲--之startActivityForResult方法讲解

2013-02-03 23:03 651 查看
博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved !

首先我们要解释一下,为什么要用这个方法?一般情况下我们使用intent来实现两个Activity之间的传递,但当前Activity需要下个Activity处理完毕返回一个值,但不通过跳转的方式,这时我们就要用到这个方法。

一台手机设备就是一硬件设备,里面跑的一个个程序就相当于一个个虚拟机,每个应用程序都是独立存在的;也可以说手机是Administrator,各应用程序是guest用户,QQ是一个guest,新浪微博也是一个guest……各自在各自的进程中处理事件,但这些guest 可以通过一定手段如广播和Service来互相通信,或者监控手机的运行状态,一旦手机关机,所有guest用户均被关闭,下次开启时根据每个guest的不同需求,注册开机启动权限,你的应用就会在开机时被启动。

此后介绍开发权当上述知识读者已知。

应用场景:如照相程序,调用系统的照相机,即一个intent事件,将要保存地址传给系统,然后在onActivityResult对路径进行处理就可以了。

前提:

使用startActivityForResult方法的Activity的launchMode不能是singleTask或singleInstance,否则不能回传数据,被启动的Activity无限制。

实现方法:

1、在A中写明跳转方法,注意requestCode值要与onActivityResult中switch变量一致。

case R.id.launch_btn12:
Intent intent = new Intent(this, SpinnerActivity.class);
startActivityForResult(intent, 101);


2、在A中实现onActivityResult方法,作为回调后使用
if (resultCode != RESULT_OK) {
return;
}
switch (requestCode) {
case 101:
String taskId = data.getStringExtra("taskId");
launch_tx12.setText(taskId);
break;
default:
break;
}


3、在B中使用setResult方法返回传递的值
Intent intent=new Intent();
intent.putExtra("taskId","SpinnerActivity" + getTaskId() );
setResult(RESULT_OK,intent);


这样,就可以利用回调事件来处理数据,而不用setClass,同样可以传递数据,减少了内存的消耗。

如果没有执行onActivityResult可能的原因如下:

1、A中startActivityForResult第二个参数和B中setResult中第一个参数大小一样,导致B返回时找不到A

2、A的launchMode不能设为singleInstance,singleTask,其他值都能设。

3、setResult应在finish方法之前执行,同时A不能被销毁。

注:super方法可以最前面,可写最后面,B中不必非setClass
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: