Activity之間的跳轉主要使用java
startActivity(Intent intent); startActivityForResult(Intent intent,int requestCode);
這兩個函數,傳遞數據的話利用Intent進行傳遞,負責數據須要配合Bundle使用.這篇文章講述瞭如何利用這兩個函數在Activity之間的跳轉以及傳遞數據.git
這裏有兩個Activity:FirstActivity與SecondActivity,從FirstActivity中跳轉到SecondActivity中只須要一個startActivity()便可:github
startActivity(new Intent(this,SecondActivity.class));
通常須要在SecondActivity中加上finish()函數,表示這個Activity結束,好比這裏直接在SecondActivity的按鈕事件裏面加上了finish():數組
不少狀況下須要在FirstActivity跳轉到SecondActivity後,在SecondActivity進行相應的操做,如更新數據之類,而後返回FirstActivity,通知FirstActivity執行某些操做,這時候就須要使用startActivityForResult().
startActivityForResult有兩個參數,一個是Intent,表示將要跳轉的Activity,一個是requestCode(int類型),表示請求碼,用於調用Activity的onActivityResult()函數.
如FirstActivity中:函數
startActivityForResult(new Intent(this,SecondActivity.class),11);
這裏11就是請求碼,而後在SecondActivity中,使用setResult()函數:測試
setResult(22,new Intent().putExtra("str","from second activity"));
setResult()接受兩個參數,第一個參數表示resultCode,從這個SecondActivity返回的結果碼,另外一個Intent,表示要返回給FirstActivity的數據.
最後在FirstActivity中重載onActivityResult():
onActivityResult中判斷請求碼與結果碼後進行相應操做.this
傳遞普通類型的數據直接使用Intent的putExtra()便可,putExtra接受兩個參數,第一個是一個String,表示鍵,第二個是值,類型能夠是byte,char,short,long等基本類型與這些基本類型組成的數組,固然String也能夠.
好比在FirstActivity中,傳遞數據給SecondActivity:
而後在SecondActivity中使用getIntent()獲取Intent後,再從裏面獲取數據:
若是想從SecondActivity中返回數據給FirstActivity,也就是從被調用的Activity中返回數據,可使用前面介紹過的setResult()方法.
其中第二個參數是一個用於存儲數據的Intent,把數據put進去便可.
最後記得在onActivityResult作相應的判斷處理:spa
當數據的種類變多時,好比混合了int,String,byte,char等,能夠對逐個類型使用putExtra(),但更好的方法是使用Bundle.
Bundle的使用與Intent相似,也是對於不一樣的類型採用鍵值對的添加方法,直接putXXX:
數據添加完畢以後,在intent中使用putExtras(bundle):
而後就能夠在SecondActivity中接收數據了.
首先須要使用getIntent().getExtras()獲取Bundle,再獲取裏面的數據.
注意一下獲取到的Bundle有可能爲null,取數據前須要判斷一下.3d
若是想要傳遞的數據是一個對象怎麼辦?難道對每個屬性都使用getter再放進去嗎?
並非,Bundle提供了一個處理序列化對象的方法:
只要對象實現了Serializable,就能夠被Bundle處理,好比這裏有一個測試類Student:
而後在FirstActivity中直接new一個,並使用Bundle的putSerializable便可.
接着再SecondActivity中經過Intent取出Bundle後,使用其中的getSerializable()取出對象,最後使用強制類型轉換:code