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

startActivityForResult的简单使用

2013-11-22 17:19 435 查看
有没有遇见过一个页面点击后进入下一个页面,然后在下一个,再下一个。到最后的时候返回上一个界面,但上一个界面已经被finish了,以前就索性把这个界面的初始传到下一个界面,返回时,再重新传入。这样做虽然可以恢复上一个页面的数据,但并不符合我们的要求。使用startActivityForResult,前一个Activity便会有一个等待后一个Activity的返回,根据返回的数据进行下一步操作,而不影响前一个Activity(如用户当前输入等)



实现过程:

1、在Intent中设置要跳转到的Activity,并通过Bundle把需要处理的数据放到Intent中

intent.setClass(MainActivity.this, OtherActivity.class);
bundle = new Bundle();
bundle.putString("Test", "good");
intent.putExtras(bundle);
startActivityForResult(intent, 1);


2、将startActivity(intent)跳转改成使用startActivityForResult(intent, 1);跳转,并重写onActivityResult(int requestCode, int resultCode, Intent data)方法

小注:
a、startActivityForResult(intent, 1)方法中的1是下一个Activity要返回值的依据,这个值必须要大于0,否则Activity中的onActivityResult不会响应

b、onActivityResult方法是用来处理并接收次Activity返回的数据,接收后可更新ui

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (resultCode) {
case 1:
Toast.makeText(MainActivity.this,
data.getExtras().getString("Test").toString(), 2000).show();
break;
case 2:
Toast.makeText(MainActivity.this,
data.getExtras().getString("Test").toString(), 2000).show();
break;

}
}
3、在次Activity中接收并处理消息,然后将处理的消息通过bundle绑定intent的方式返回给第一个Activity

Intent intent = OtherActivity.this.getIntent();
Bundle bundle = intent.getExtras();
intent.putExtra("Test", bundle.getString("Test") + " boy");
OtherActivity.this.setResult(1, intent);
OtherActivity.this.finish();

注:1、一个主Activity中可跳转到多个次Activity,做对应处理时,在次Activity的setResult(1,intent)中设置好标识符(这里设置为1),然后在主Activity中的onActivityResult方法中根据resultCode做相应的处理

2、项目中出现问题,报错“WARN/ActivityManager(67):
Activity is launching as a new task, so cancelling activity result.”,解决:原来是把次Activity的launchmode设置成了singleTask,去掉次Activity的launchmode就可以了

源码:定义了4个Activity,主activity跳转到其他2个时附带String good,第二个在接收到数据后将String +"boy"后返回给主Activity并Toast;第三个在接收到数据后将String +"boy&girl"后返回给主Activity并Toast。第4个采用intent跳转+finish当前Activity的方式进行Activity之间的跳转

http://download.csdn.net/detail/u012895758/6594781
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息