標籤:android style blog ar color 使用 sp java for
大家都知道startActivity()是用來切換跳轉Activity的、如果想要在另個Activity中出書資料的話、只需要在源activity中使用intent.putExtra()方法傳出資料、在對應activity中使用intent.get**Extra()方法接收資料就行了
那麼startActivityForResult()方法呢、它也是用來帶資料跳轉activity的、可是這兩個方法具體有什麼區別呢?
這就要說說帶資料跳轉的方向了、
第一個方法只能把資料發送過去、可是如果子activity需要再傳送回一些資料呢?
你可能會說、在子activity中使用intent.putExtra()方法把資料寫入、在父activity中寫入get*方法就行了嘛、
可是、你想過沒有這個父activity中的get方法要寫在哪兒呢?
我想、你當然會說要想在activity一啟動就擷取資料、所以當然要寫在onCreate方法中、
那麼問題就來了、如果你在父activity中的onCreate方法中寫入了get*方法來讀取(獲得)資料、
那麼就意味著你一啟動父activity就會執行get*方法(因為第一個執行的方法就是onCreate)、而父activity是主方法、它必定是程式第一個執行的activity、
也就是說、此時還沒有執行子activity、也就沒有資料通過intent傳過來、所以在執行onCreate時、執行到get*方法時就會讀不到資料發生錯誤拋出異常、
那麼到底該怎麼讓父activity擷取到從子activity傳回的資料呢?
這就是第二個方法:startActivityFoResult()方法的作用了
下面具體說說這個方法是怎麼實現把子activity傳回的資料讀取過來的
先看看這個方法的參數:startActibityForResult(Intent intent,int requestCode)
發現第一個參數是Intent類型、這個就不必多說了、看看第二個int型的、看字義是“請求碼”、其實作用也就是請求碼、這個具體在下面說、
只要你使用了startActivityFoResult()、那麼就不可避免的要在這個類中添加一個onActivityResult(int requestCode ,int resultCode ,Intent intent)這個方法、
你可以稱它為:回調方法(子activity回調父activity的方法)
這個方法如同onCreate()一樣是這個類的成員方法、也就是說這個方法不在onCreate方法中(這樣就避免了一啟動這個activity就執行get*方法)、
這個方法有什麼用呢、你可以理解為它是用來監視子activity的方法、只要子activity一結束(調用了finish()方法)、它就會被執行、這樣就實現了“回調”這一功能
下面看看這個方法的參數:
int requestCode:與startActibityForResult(Intent intent,int requestCode)方法中的int requestCode參數對應、可以理解為請求碼
int resultCode:見名知意、結果碼、這個是在子activity中設定的
Intent intent:這個就不必多說了
接著我們來看看這幾個參數的具體作用、
1)int requestCode、請求碼、它與父activity中的startActibityForResult(Intent intent,int requestCode)方法中的int requestCode參數對應、
用它來判斷是從父activity中哪個組件請求進入子activity的、因為父activity中可能有多個按鈕或其他組件都可以發出進入新的子activity的請求、
而onActivityResult()方法在父activity中只有一個、所以就可以(需要)來標記清楚
2)int resultCode、結果碼、它也是起到標記的作用、它與子activity中使用setResult(int resultCode,Intent intent)方法來設定的resultCode參數對應、
那麼它的作用也就和子activity有關、用它可以來判斷是哪個子activity在結束後來回調這個回調方法的、因為父activity可能需要跳轉到多個不同的子activity
而onActivityResult()方法在父activity中只有一個、所以就可以(需要)來標記清楚
3)Intent intent、請求執行回調方法的intent
大體都說完了、下面給出一個java代碼來直觀的看一下
//父activity核心代碼: Button button1=(Button)findViewById(R.id.button1); Button button2=(Button)findViewById(R.id.button2); //onCreate核心代碼: onCreate(){ //為按鈕1設定監聽,放入名為data1的資料100,佈建要求嗎為1 button1.setOnClickListener(new View.OnClickListener(){ onClick(){ Intent intent1=new Intent(); intent.setClass(this, one.class); intent.putExtra("data1", "100"); startActivityForResult(intent , 1); } } //為按鈕2設定監聽,放入名為data2的資料200,佈建要求嗎為2 button2.setOnClickListener(new View.OnClickListener(){ onClick(){ Intent intent2=new Intent(); intent.setClass(this, two.class); intent.putExtra("data2", "200"); startActivityForResult(intent , 2); } } } //回調方法 onActivityResult(int requestCode, int resultCode, Intent intent){ super.onActivityResult(requestCode, resultCode, intent); switch(requestCode){//判斷父activity中的哪個按鈕 case 1://如果是按鈕1 } case 2://如果是按鈕2 } } switch(resultCode){//判斷是哪個子activity case 1://如果是子activity1 } case 2://如果是子activity2 } }//******************************************************************
//子activity1:one.java核心代碼Button button1=(Button)findViewById(R.id.button1); onCreate(){ //為按鈕1設定監聽,設定結果嗎為1 button1.setOnClickListener(new View.OnClickListener(){ onClick(){
setResult(1,intent); finish(); } }
//*********************************************************************//子activity2:two.java核心代碼Button button1=(Button)findViewById(R.id.button1); onCreate(){ //為按鈕1設定監聽,設定結果嗎為2 button1.setOnClickListener(new View.OnClickListener(){ onClick(){ setResult(2,intent); finish(); } }
好累啊。。
代碼是直接寫的、某些無關緊要的問題請忽略。。
以後還是在eclipse中寫好代碼粘過來吧。。
今天這些就說完了、
android中使用intent來實現Activity帶資料跳轉