android中使用intent來實現Activity帶數據跳轉

你們都知道startActivity()是用來切換跳轉Activity的、若是想要在另個Activity中出書數據的話、只須要在源activity中使用intent.putExtra()方法傳出數據、在對應activity中使用intent.get**Extra()方法接收數據就好了java

 

那麼startActivityForResult()方法呢、它也是用來帶數據跳轉activity的、但是這兩個方法具體有什麼區別呢?eclipse

 

這就要說說帶數據跳轉的方向了、this

 

第一個方法只能把數據發送過去、但是若是子activity須要再傳送回一些數據呢?spa

你可能會說、在子activity中使用intent.putExtra()方法把數據寫入、在父activity中寫入get*方法就好了嘛、code

 

但是、你想過沒有這個父activity中的get方法要寫在哪兒呢?blog

我想、你固然會說要想在activity一啓動就獲取數據、因此固然要寫在onCreate方法中、ip

那麼問題就來了、若是你在父activity中的onCreate方法中寫入了get*方法來讀取(得到)數據、get

那麼就意味着你一啓動父activity就會執行get*方法(由於第一個執行的方法就是onCreate)、而父activity是主方法、它一定是程序第一個執行的activity、it

也就是說、此時尚未執行子activity、也就沒有數據經過intent傳過來、因此在執行onCreate時、執行到get*方法時就會讀不到任何數據、class

並且還會在每次啓動activity時、無論需不須要從子activity接受數據都畫蛇添足的執行一遍get*方法、來獲取數據、

這樣雖然能夠實現從子activity中獲得返回的數據、但倒是不理想的、不正確的、絲毫沒有邏輯性的

 

那麼到底該怎麼讓父activity獲取到從子activity傳回的數據呢?

 

這就是第二個方法:startActivityFoResult()方法的做用了

下面具體說說這個方法是怎麼實現把子activity傳回的數據讀取過來的

先看看這個方法的參數:startActibityForResult(Intent intent,int requestCode)

發現第一個參數是Intent類型、這個就沒必要多說了、看看第二個int型的、看字義是「請求碼」、其實做用也就是請求碼、這個具體在下面說、

只要你使用了startActivityFoResult()、那麼就要在這個類中添加一個onActivityResult(int requestCode ,int resultCode ,Intent intent)這個方法、

你能夠稱它爲:回調方法(子activity回調父activity的方法)、 

固然你也能夠不添加(或方法體爲空)、那也就表明你不須要對子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中寫好代碼粘過來吧。。

今天這些就說完了、

相關文章
相關標籤/搜索