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"
/>
在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去达到你的目的。