`

startActivityForResult 和 startActivity

阅读更多

首先说下这个问题的情景:

当前的软件有一个主Activity A1 并且从A1可以跳转到A2 A3两个界面 而A2 A3也可以回退到A1 同时在这之间 需要传递一些数据

第一种做法是:

 

Intent intent=new Intent(A1.this,A2.class);
//给intent通过setExtra等方法设置要传递的信息
startActivity(intent);

 

 

在A2中可以通过getIntent()方法将信息取出来

同理,A2回退到A1 也一样

 

也就是A1和A2之间互相startActivity

 

但是在学习的过程中 发现Activity的跳转还存在另外一个方法startActivityForResult

以A1跳转A2为说明

启动方式没有改变 只是将startActivity改为startActivityForResult

 

而此时从A2回到A1 就不需要再次调用startActivity了,而是采用

Intent intent=new Intent();

//同样在intent中放置需要传递的信息
setResult(RESULT_CODE, intent); //RESULT_CODE是一个int值 用于父界面区分
finish(); //关闭自己 一定要执行这句话

  此时由于子窗口关闭 父窗口就被显示出来,为了取得需要传递的那些值,还需要在父窗口中复写一个重要方法onActivityResult

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
		super.onActivityResult(requestCode, resultCode, intent);
	}

  其中就可以根据resultCode来进行不同的操作了

 

 

最后 两者之间又有什么区别呢

default的startActivity的LaunchMode如果在多次反复跳转的情况下 产生多个A1 A2的实例(LaunchMode包括standard,SingleTop,SingleTask,SingleInstance4种)这可能并不是我们期望的

 

当然还有一个问题 如果采用互相跳转 同时又采用SingleTask的mode 两者之间是不是就相等了。。至少从我的理解来看 是相同的 但是在这样的情况下 觉得startActivityForResult会更方便一些

0
0
分享到:
评论
3 楼 cookiejj2010 2011-12-31  
carlosk 写道
startActivityForResult在sigleTask模式下是无法使用的.

但经常会有一些Activity需要设置为sigleTask,并且还需要有拍照,找相册等等类似的需求,这样就很难协调.

我觉得这是Android API的一个不完善的地方.


的确 在SingleTask下 onActivityResult方法在最初就被执行了 而真正返回的时候却没有执行
2 楼 carlosk 2011-12-31  
startActivityForResult在sigleTask模式下是无法使用的.

但经常会有一些Activity需要设置为sigleTask,并且还需要有拍照,找相册等等类似的需求,这样就很难协调.

我觉得这是Android API的一个不完善的地方.
1 楼 zhongxinhu 2011-12-30  
mark!

相关推荐

Global site tag (gtag.js) - Google Analytics