android中使用intent來實現Activity帶資料跳轉

來源:互聯網
上載者:User

標籤: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帶資料跳轉

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.