轉自:http://blog.sina.com.cn/s/blog_6afeac500100y157.html
(1)首先是Activity的簡單跳轉:
Activity的切換一般是通過Intent來實現的,Intent是一個Activity到達另一個Activity的引路者,它描述了起點(當前Activity)和終點(目標Activity)。一個簡單Intent實現如下:
Intent intent = new Intent(); //創建一個Intent對象
intent.setClass(activity1.this, activity2.class); //描述起點和目標
startActivity(intent); //開始跳轉
(2)通常,我們在Activity的切換中,希望把前一個Activity的某些數據傳遞給下一個Activity。這時,我們可以藉助Bundle來實現。Bundle,相當於數據存儲包,用於存放我們想要轉達的數據。打個比方,Intent就像一封郵件,裏面有送信人地址(原始Activity),也有收信人地址(目標Activity),而Bundle就是附件也可看做是信件內容。下面是它的簡單實現:
a、Activity1發送:
Intent intent = new Intent();
intent.setClass(activity1.this, activity2.class); //描述起點和目標
Bundle bundle = new Bundle(); //創建Bundle對象
bundle.putString("something", "Activity1發來的數據"); //裝入數據
intent.putExtras(bundle); //把Bundle塞入Intent裏面
startActivity(intent); //開始切換
b、Activity2接受從Activity1發來的數據:
Intent intent = this.getIntent(); //獲取已有的intent對象
Bundle bundle = intent.getExtras(); //獲取intent裏面的bundle對象
string = bundle.getString("something"); //獲取Bundle裏面的字符串
(3)解決了如何傳遞數據問題,那麼下一個問題是如何接受從目標Activity返回的處理結果。這裏有兩種方式,一是在onRestart方法(onRestrart表示重啓Activity時激發的事件,具體看上一篇的生命週期)裏面接受處理結果,方法實現和Activity2接受從Activity1發來的數據處理一樣。另一種方式,是採用應答模式切換。這裏,主要下第二種方式。應答模式切換和普通的切換不同在於,普通的是有去沒回,應答則是有來有往。代碼實現也不一樣:1、從Activity1切換到Activity2:startActivityForResult(intent,0);2、從Activity2返回到Activity1:setResult(RESULT_OK, intent)。3、接受返回結果:protected void onActivityResult()。具體代碼如下;
a、從Activity1切換到Activity2:
Intent intent = new Intent();
intent = intent.setClass(ActivityIntent.this, AnotherActivity.class);
Bundle bundle = new Bundle();
bundle.putString("string", et_string.getText().toString());
intent.putExtras(bundle);
startActivityForResult(intent,0); //只有這裏不同
//ActivityIntent.this.finish(); //不能用finish,會觸發onDestroy();
b、從Activity2返回到Activity1:
Intent intent = new Intent();
intent = intent.setClass(AnotherActivity.this, ActivityIntent.class);
Bundle bundle = new Bundle();
bundle.putInt("result", "Activity2的處理結果");
intent.putExtras(bundle);
AnotherActivity.this.setResult(RESULT_OK, intent); //RESULT_OK是返回狀態碼
AnotherActivity.this.finish(); //會觸發onDestroy();
c、Activity1接受Activity2的返回結果:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(resultCode) { //根據狀態碼,處理返回結果
case RESULT_OK:
Bundle bundle =data.getExtras(); //獲取intent裏面的bundle對象
String result = bundle.getInt("result");
break;
default:
break;
}
}