startActivityForResult的简单使用

有没有遇见过一个页面点击后进入下一个页面,然后在下一个,再下一个。到最后的时候返回上一个界面,但上一个界面已经被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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值