android-Activity的跳转与传值:startActivityForResult,setResult,onActivityResult

Activity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据。

Intent 相信都熟悉,显式隐式就不一一陈述了。

上代码。



public class AAcitvity extends Activity {

	private void A(){
		Intent toB = new Intent(AAcitvity.this, BAcitvity.class);
		//requestCode可以让后面知道是哪个调用它的,这个在onActivityResult也会返回数值
		//startActivity(toB);是没有回传值的。
		startActivityForResult(toB, A_REQUEST_CODE);
		
//		Intent toC = new Intent(AAcitvity.this, CAcitvity.class);
//		startActivityForResult(toC, A_REQUEST_CODE);
	}
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		
		//也可以是if(requestCode == A_REQUEST_CODE && resultCode == B_RESULT_CODE)
		if(resultCode == B_RESULT_CODE){
			Log.i("onActivityResult", "B_RESULT");
			//得到回调数据之后可以在这里操作。
			//data.getExtra();这里data是后面setResult()传回来的
			//to do what you want do here
		}
		else if(resultCode == C_RESULT_CODE){
			Log.i("onActivityResult", "C_RESULT");
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
}



public class BAcitvity extends Activity {
	private void B(){
		//当需要结束并回传数据给A了。下面的C同理。
		//data是Intent类型,可以使用data.putExtra()回传数据到调用这个Activity的A(上面可以看到是A startB的)
		setResult(B_RESULT_CODE, data);
		finish();
	}
}

public class CAcitvity extends Activity {
	private void C(){
		setResult(C_RESULT_CODE, data);
		finish();
	}
}

(另提一下,resultCode可以使用RESULT_OK,RESULT_CANCEL的,RESULT_FIRST_USER,)

RESULT_CANCELED = 0;
RESULT_OK = -1;
RESULT_FIRST_USER = 1;


Intent toB 和 toC 本质上一样,不懂两个都试一次就可以了。



还有一个需要注意的地方!!


<activity
        android:name=".activity.BActivity" 

android:launchMode="singleTask"
/>

<activity
        android:name=".activity.CActivity" 

android:launchMode="singleTask"
/>

如果Manifest文件中,B,C的启动模式使用了 "singleTask"的话。

在A执行了startActivityForResult(toB, A_REQUEST_CODE);

A中的onActivityResult(int requestCode, int resultCode, Intent data)马上会得到

requestCode是A_REQUEST_CODE的值,而resultCode是0。

再进入B中。


可以试试自己动手调试一下。

会发现顺序是

(A)startActivityForResule->(A)onActivityResult->(B)onCreate的。


当你遇到这个情况,可以尝试使用Application 类去管理Activty去达到你的目的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值