小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

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

博客出自: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


posted on 2013-02-03 23:03  王峰炬  阅读(135)  评论(0编辑  收藏  举报

导航